列表和更新关联 ID - Rails 4,Form_for
Listings and Updating Associated IDs - Rails 4, Form_for
我有一个模型叫Foo
,里面有很多bars
。我希望能够通过添加或删除关联的 foo.bars.ids
来添加/删除 foo.bars
。我怎样才能做到这一点?
我试过了:
Foo#编辑
def edit
@bars = @foo.bars
end
表格
<%= form_for @foo, url: edit_foo_path(@foo.id) do |p| %>
...
<%= p.text_area @bars %> #<= returns undefined method `Collection..' for `foo`
...
<%= p.fields_for @foo.bars do |b| %>
<%= b.text_area :ids %> #<= returns in 'unpermitted param 'bar' on #update'
<% end %>
...
<% end %>
我想 fields_for
无论如何都不能在这里工作,因为我没有更新 bar
的属性。相反,我希望能够通过列出他们的 ids
添加/删除 foo.bars
连接到 has_many 协会为您提供的 Foo#bar_ids
和 Foo#bar_ids=
方法。例如,您可以通过复选框来执行此操作。
<% form_for @foo do |f| %>
<% @bars.each do |bar| %>
<div class="bar--checkbox">
<%= check_box_tag "foo[bar_ids]", bar.id, @foo.bar_ids.include?(bar.id) %>
<%= bar.name %>
</div>
<% end %>
<%= f.submit "Save" %>
<% end %>
现在,在参数中你会得到类似
的东西
params = {:id => 123, :foo => {:bar_ids => [1, 5, 8, 10]})
您可以执行通常的更新控制器代码:
@foo = Foo.where(:id => params[:id])
@updated = @foo.update_attributes(params[:foo])
这就像这样做:
@foo.bar_ids = [1, 5, 8, 10]
@foo.save
注意 - 在您的代码中,您将@bars 设置为@foo 的当前柱。例如,它可以是系统中的所有条形图,就添加和删除您想要的任何条形图而言会更好。
我有一个模型叫Foo
,里面有很多bars
。我希望能够通过添加或删除关联的 foo.bars.ids
来添加/删除 foo.bars
。我怎样才能做到这一点?
我试过了:
Foo#编辑
def edit
@bars = @foo.bars
end
表格
<%= form_for @foo, url: edit_foo_path(@foo.id) do |p| %>
...
<%= p.text_area @bars %> #<= returns undefined method `Collection..' for `foo`
...
<%= p.fields_for @foo.bars do |b| %>
<%= b.text_area :ids %> #<= returns in 'unpermitted param 'bar' on #update'
<% end %>
...
<% end %>
我想 fields_for
无论如何都不能在这里工作,因为我没有更新 bar
的属性。相反,我希望能够通过列出他们的 ids
foo.bars
连接到 has_many 协会为您提供的 Foo#bar_ids
和 Foo#bar_ids=
方法。例如,您可以通过复选框来执行此操作。
<% form_for @foo do |f| %>
<% @bars.each do |bar| %>
<div class="bar--checkbox">
<%= check_box_tag "foo[bar_ids]", bar.id, @foo.bar_ids.include?(bar.id) %>
<%= bar.name %>
</div>
<% end %>
<%= f.submit "Save" %>
<% end %>
现在,在参数中你会得到类似
的东西params = {:id => 123, :foo => {:bar_ids => [1, 5, 8, 10]})
您可以执行通常的更新控制器代码:
@foo = Foo.where(:id => params[:id])
@updated = @foo.update_attributes(params[:foo])
这就像这样做:
@foo.bar_ids = [1, 5, 8, 10]
@foo.save
注意 - 在您的代码中,您将@bars 设置为@foo 的当前柱。例如,它可以是系统中的所有条形图,就添加和删除您想要的任何条形图而言会更好。