Railsの非表示フィールドの未定義のメソッド「マージ」エラー


152

私はレールでこのようなことをしたいです

これが私がこれまでにレールに持っているものです:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service, "test" %>
  <%= f.submit %>
<% end %>

しかし、それから私はこのエラーを受け取ります:

undefined method `merge' for "test":String

レールのhidden_​​fieldに値を渡すにはどうすればよいですか?


64
答えを受け入れますか?
無呼吸

回答:


417

やったほうがいい:

<%= f.hidden_field :service, :value => "test" %>

hidden_field 2番目の引数としてハッシュを期待します


9
<%= hidden_field_tag :service, "test" %>使用していないときも書いているので、一貫性がありませんform_for |f|...
Augustin Riedinger '24 / 09/14

55

hidden_​​field_tagの代わりにhidden_​​fieldを使用しています。_tag以外のバージョンを使用しているので、コントローラーはフォームをバッキングするオブジェクトのその属性の値をすでに設定していると想定されます。例えば:

コントローラ:

def new
  ...
  @order.service = "test"
  ...
end</pre>

見る:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service %>
  <%= f.submit %>
<% end %>

27

Ruby 1.9とRails 4では問題なく動作します

<%= f.hidden_field :service, value: "test" %>



0

ちなみに、サーバーからブラウザーにデータを送信するために非表示フィールドを使用していません。データ属性は素晴らしいです。できるよ

<%= form_for @order, 'data-service' => 'test' do |f| %>

そして、jqueryで属性値を取得します

$('form').data('service')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.