Rails скрытое поле неопределенный метод ошибка слияния - PullRequest
150 голосов
/ 09 июля 2011

Я хочу сделать что-то подобное в рельсах

Вот что я имею в рельсах:

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

Но тогда я получаю эту ошибку:

undefined method `merge' for "test":String

Как я могу передать значения в моем скрытом поле в рельсах?

Ответы [ 6 ]

411 голосов
/ 09 июля 2011

Вы должны сделать:

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

hidden_field ожидает хэш в качестве второго аргумента

55 голосов
/ 09 июля 2011

Вы используете скрытое поле вместо тега скрытого поля. Поскольку вы используете версию, отличную от _tag, предполагается, что ваш контроллер уже установил значение этого атрибута для объекта, который поддерживает форму. Например:

Контроллер:

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

вид:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service %>
  <%= f.submit %>
<% end %>
27 голосов
/ 29 июля 2013

Отлично работает в Ruby 1.9 и рельсах 4

<%= f.hidden_field :service, value: "test" %>
3 голосов
/ 23 апреля 2013

Версия с новым синтаксисом для хэшей в ruby ​​1.9:

<%= f.hidden_field :service, value: "test" %>
2 голосов
/ 21 мая 2013

Это также работает в Rails 3.2.12:

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

0 голосов
/ 21 мая 2013

Кстати, я не использую скрытые поля для отправки данных с сервера в браузер. Атрибуты данных потрясающие.Вы можете сделать

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

, а затем получить значение атрибута с помощью jquery

$('form').data('service')
...