Rails скрытое поле неопределенный метод ошибка слияния

146

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

Вот что я до сих пор видел в рельсах:

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

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

undefined method `merge' for "test":String

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

  • 64
    Вы бы приняли ответ?
  • 5
    @ Джейк, где ты был? Мы скучаем по тебе. Пожалуйста вернись.
Показать ещё 3 комментария
Теги:
forms
hidden-field
ruby-on-rails-3

6 ответов

381

Вам следует:

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

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

  • 1
    @rodrigovieira: пожалуйста
  • 0
    Так просто, но так сложно, спасибо!
Показать ещё 1 комментарий
51

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

контроллер:

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

Вид:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service %>
  <%= f.submit %>
<% end %>
  • 4
    +1 за ценный ответ
27

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

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

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

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

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

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

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню