Ответ 1
Вам следует:
<%= f.hidden_field :service, :value => "test" %>
hidden_field
ожидает хэш как второй аргумент
Я хочу сделать что-то подобное в рельсах
Вот что я до сих пор видел в рельсах:
<%= form_for @order do |f| %>
<%= f.hidden_field :service, "test" %>
<%= f.submit %>
<% end %>
Но тогда я получаю эту ошибку:
undefined method `merge' for "test":String
Как передать значения в моем скрытом поле в рельсах?
Вам следует:
<%= f.hidden_field :service, :value => "test" %>
hidden_field
ожидает хэш как второй аргумент
Вы используете 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 %>
Он отлично работает в Ruby 1.9 и рельсах 4
<%= f.hidden_field :service, value: "test" %>
Версия с новым синтаксисом для хэшей в ruby 1.9:
<%= f.hidden_field :service, value: "test" %>
Это также работает в Rails 3.2.12:
<%= f.hidden_field :service, :value => "test" %>
Кстати, я не использую скрытые поля для отправки данных с сервера на браузер. атрибуты данных являются удивительными. Вы можете сделать
<%= form_for @order, 'data-service' => 'test' do |f| %>
И затем получите значение атрибута с помощью jquery
$('form').data('service')