質問: Rails5.2で検索画面を作っている所です。 検索条件の入力フォームは、「form_with」を使うことにしました。 ``` <%= form_with url: items_path, method: :get, local: true do |f| %> <%= f.text_field(:search, :keyword) %> <%= f.submit "検索" , class: "btn btn-default" %> <% end %> ``` ここで2行目(f.text_field)でエラーになりました。 ``` ActionView::Template::Error (undefined method `merge' for :keyword:Symbol): ``` 「merge」なんてメソッド無いのに??うーん。 試しに以下のように f. を外すと ``` <%= text_field(:search, :keyword) %> ``` エラーなく動作しました。 一応動作はしたようですが疑問が解決できずにいます。 f.text_fieldだと何故エラーになるのか? 逆にf.submitは、f.が無いとエラーになりました。紐づくformがないからでしょうか?じゃ、なぜtext_fieldは要らないの?? この辺り教えていただけないでしょうか? 宜しくお願いします。
回答: f.text_field の場合、ひとつ目が(このform_withの場合は)item のmethod(coliumn名と思ってください)ふたつ目が optionをHashで与えます。そのoptionを defaultのoptionとmergeするときに、HashにSymboleはmeregeできないよ、というエラーです。 f.のないtest_fiesl は ひとつ目が object、ふたつ目がmethod なので search オブジェクトの keyword methodと見なされて通った。 この f.text_field(:search, :keyword) でどういう name,id のinput type="text" をつくりたいのですか?