読者です 読者をやめる 読者になる 読者になる

Web + Life Hack

〜True But Useless〜

【Rails】「paramsが扱えるのはシンボルだけ。」と思ってる方に見て欲しい内容

rails



view側

<%= form_for([:front, @g08m11_profile], :url => confirm_for_join_front_user_url) do |f| %>
<td class="info p15">
<p class="mb10"><span class="mr30"><%= f.date_select :birthday, :start_year => G08m11Profile::max_year_for_registration_birthday, :end_year =>1900, :prompt => true %></span><span class="fs14 pink-f36">19歳未満の方はご利用頂けません</span></p>
</td>
<% end %>

このviewに対して確認画面でnullだったら(未入力だったら)
エラー出力、リダイレクトするロジックを記述しようとしてハマりました。


ハマった書き方

コントローラー側

@errors << '生年月日を入力して下さい' if params[:g08m11_profile]:[birthday(1i)].blank?
@errors << '生年月日を入力して下さい' if params[:g08m11_profile][:birthday(2i)].blank?
@errors << '生年月日を入力して下さい' if params[:g08m11_profile][:birthday(3i)].blank?

この場合、シンタックスエラーが発生する。

ログ

[2014-03-07 10:56:42.009815 #1606][INFO] -- : 
  Parameters: {"utf8"=>"✓", 
  "authenticity_token"=>"4bxdOQoCsQXAZ+LWBrH5iXnXTZIA1hP8fET7IC6jyRc=", 
  "g08m11_profile"=>{"birthday(1i)"=>"1995", "birthday(2i)"=>"1", 
  "birthday(3i)"=>"1"}, "password"=>"[FILTERED]", "password_confirmation"=>
  "[FILTERED]", "path_prefix"=>"/", "protocol"=>"http://"}


でもログには
「birthday(1i)」が出力されてる。そこでハマりました。

正解の書き方


コントローラー側

@errors << '生年月日を入力して下さい' if params[:g08m11_profile]['birthday(1i)'].blank?
@errors << '生年月日を入力して下さい' if params[:g08m11_profile]['birthday(2i)'].blank?
@errors << '生年月日を入力して下さい' if params[:g08m11_profile]['birthday(3i)'].blank?



「文字列にすれば良かっただけぇぇぇぇ。」



paramsは普通に文字列も対応できるんですね。
クイックリファレンスではほとんど、
シンボルの記述方法しか書いていなかったのでそこまで気が回りませんでした。

後、rails側が勝手に「(1i)」なんて付けるんですね。知りませんでした。。


個人的な写真:

何か六本木っぽくなかったのでパチり!

広告を非表示にする