更新rails 3中的对象列表

时间:2013-09-29 09:38:22

标签: ruby-on-rails ruby-on-rails-3.2

我在视图中有一个@website_links对象数组,想要更新它们, 但当我发送到控制器动作时,我得到一个只有选中字段的列表, 如何获取整个对象的列表(已选中和未选中)? 如何在更新操作中正确更新它们?

<%= form_tag(:controller => 'website_links', :action => 'update', method: "put") do %>
    <%- @website_links.each do |link| %>
       <%= link.link %> 
       <%=  check_box_tag "checked[]", 1, link.checked"  %>
    <% end %>
    <%= submit_tag "Update" %>
<% end %>

1 个答案:

答案 0 :(得分:1)

您没有将表单和输入助手与ActiveRecord模型结合使用。相反,您使用以_tag结尾的表单助手来生成 dumb 表单。

我将假设website_links是ActiveRecord模型。

要创建更智能的表单,在这种情况下,可能需要获取所有这些website_links的父对象。这样,所有这些网站链接都有一个共同的父级参考。

在这种情况下,让我们假装有一个名为Website的模型作为父模型。这个网站has_many :website_links,当然还有WebsiteLink belongs_to :website

让我们为调用网址Website时要呈现的website/45/edit模型创建一个表单。保留为update中的website_controller方法生成的默认代码。

<%= form_for @website do |f| %>
  <%= f.input_field :website_name %>

  <%= f.fields_for :website_links do |subform| %>
    <%= subform.object.link_name %>
    <%= subform.check_box :checked %>
  <% end %>

  <%= f.submit %>
<% end %>

此外,将此行添加到Website模型:

accepts_nested_attributes_for :website_links, allow_destroy: true

这允许网站模型为相关的website_links获取参数并更新这些链接。

请注意,我尚未测试此代码,可能不符合您的需求。也许您还需要添加和删除链接。在RailsCast中也可以找到一些很好的解释。