web-dev-qa-db-ja.com

Rails隠しフィールド未定義メソッド 'merge'エラー

Railsでこのようなことをしたい

ここに私がこれまでRailsで持っていたものがあります:

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

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

undefined method `merge' for "test":String

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

150
Jake

やったほうがいい:

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

hidden_fieldは、2番目の引数としてハッシュを想定しています

412
apneadiving

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 %>
55
user132447

Ruby 1.9およびRails 4で正常に動作します

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

Ruby 1.9のハッシュの新しい構文を備えたバージョン:

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

これはRails 3.2.12でも機能します:

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

2
bradmalloy

ところで、サーバーからブラウザにデータを送信するために隠しフィールドを使用しません。 データ属性 は素晴らしい。できるよ

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

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

$('form').data('service')
0
Alex Teut