我有两个模型:车站和饮料
车站 has_many :drinks 和 Drinks own_to :stations
我正在尝试制作表格,以便当您创建电台时,您也可以选择属于该电台的 4 种饮料。
原始形式:
<%= semantic_form_for [:admin, @station] do |f| %>
<fieldset class="inputs">
<ol>
<%=f.input :name %>
<%=f.input :number, :as => :number %>
</ol>
</fieldset>
<%= f.buttons :commit %>
我一直在尝试弄清楚如何在此表单中创建 4 个(选择)输入字段,以便您可以为当前电台选择 Drink #1、#2、#3、#4。有任何想法吗?
我目前正在尝试 accepts_nested_attributes_for :drinks, :allow_destroy => true。
饮料属于_to :station
id | name | station_id |
车站 has_many :drinks
id | name |
.
更新 正如 tihm 下面所述,您可以添加 4 种饮料并使用以下命令编辑它们的值:
<% f.fields_for :drinks do |drink_form| %>
<%# Put your inputs here...could be a select box %>
<%= drink_form.select :name, [['Drink #1', 'drink_1'],['Drink #2', drink_2] %>
<%# Or a plain input %>
<%= drink_form.input :description %>
<%# ... Any other drink attributes ... %>
<% end %>
但是,我想做的是生成四个选择框,每个选择框都列出 Drink.all
并且能够将一个饮料对象替换为另一个饮料对象。因此,当您将第一个选择框的值从可口可乐更改为百事可乐时,它会从可口可乐中删除 station_id,并将 station_id 添加到百事可乐。
我不需要能够编辑饮料属性。我只需要更改与此电台关联的饮料。这可以用同样的形式吗?
最佳答案
您需要先观看:
- http://railscasts.com/episodes/196-nested-model-form-part-1
- http://railscasts.com/episodes/197-nested-model-form-part-2
如果你知道你总是有 4 个或更少,那么会更容易一些,你可以跳过 Railscast 中的 js。
在您的 Controller 中,请务必构建您需要的空饮料对象:
....
@station = Station.new
4.times do
@station.drinks.build
end
...
这样, View 中的#fields_for就有了要迭代的对象。在您看来,类似的事情:
<%= semantic_form_for [:admin, @station] do |f| %>
<fieldset class="inputs">
<ol>
<%=f.input :name %>
<%=f.input :number, :as => :number %>
<% f.fields_for :drinks do |drink_form| %>
<%# Put your inputs here...could be a select box %>
<%= drink_form.select :name, [['Drink #1', 'drink_1'],['Drink #2', drink_2] %>
<%# Or a plain input %>
<%= drink_form.input :description %>
<%# ... Any other drink attributes ... %>
<% end %>
</ol>
</fieldset>
<%= f.buttons :commit %>
#select 在很大程度上取决于您选择的内容以及数据的结构。它来自模型、简单列表等吗?
关于ruby-on-rails - 以 Form 形式向站添加 4 种饮料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436894/