0

我在视图中有一个对象数组@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 %>
4

1 回答 1

1

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

我假设 website_links 是一个 ActiveRecord 模型。

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

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

让我们为调用Websiteurl 时要呈现的模型创建一个表单。为方法website/45/edit生成的默认代码保留在.updatewebsite_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中也可以找到一些很好的解释。

于 2013-09-29T10:14:40.427 回答