Rails 3: Почему поле выбора не пропускает правильное значение?

StackOverflow https://stackoverflow.com/questions/4487025

Вопрос

У меня есть следующее поле выбора, которое было создано с использованием вложенной формы:

<select name="product[shop_attributes][id]" id="product_shop_attributes_id">
  <option value="23">KMART</option>
  <option value="24">Super Shop</option>
  <option selected="selected" value="22">TARGET</option>
  <option value="new">Create New Shop</option>
</select>

selected="selected" был создан прохождением :selected => "22" к f.select опции.

Проблема в том, что независимо от того, какой вариант выбран, представленное значение всегда "22".

Я заметил, что создан скрытый ввод, который, я полагаю, вызывает проблему:

<input type="hidden" value="22" name="product[shop_attributes][id]" id="product_shop_attributes_id">

Таким образом, есть 2 элемента с id=product_shop_attributes_id.

Что может привести к созданию этого скрытого поля ввода?


Соответствующий код создания поля выбора:

<%= form_for @product do |f| %>
  <%= f.fields_for :shop do |sf| %>
    sf.select(:id, <options>, {:prompt => true, :selected => <default_value>})
  <% end %>
<% end %>

Соответствующий код контроллера:

def edit
  @product = Product.find(params[:id]) # the select box indeed gets it's initial value from @product
end

def update
  @temp = params.inspect
end

update.html.erb:

<%= @temp %>

Я вижу здесь всегда одинаково (независимо от того, какой вариант выбран):

"product"=>{"shop_attributes"=>{"id"=>"22"},...}
Это было полезно?

Решение 2

Проблема в том, что, как я упоминал в вопросе, скрытое поле ввода с тем же id как select.

Я открыл Отдельный вопрос Чтобы выяснить, почему это происходит.

Другие советы

Нет ничего плохого в рельсах, сгенерированных HTML. Вероятно, это способ получить к нему в своем контроллере. Не могли бы вы опубликовать исходный код Rails, который сгенерировал этот HTML и код, который вы используете для его обработки?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top