【发布时间】:2012-08-28 13:57:36
【问题描述】:
我正在制作我自己的自定义视图,我需要使创建关联模型的过程对我的用户来说不那么痛苦。我想在线显示所有与模型相关的部分,并带有用于编辑它们的控件。对于基本字段,我自己很容易滚动,但我宁愿为内联模型的关联使用 form_filtering_select 部分,但我找不到任何文档来执行此操作。
【问题讨论】:
标签: ruby-on-rails model-view-controller rails-admin
我正在制作我自己的自定义视图,我需要使创建关联模型的过程对我的用户来说不那么痛苦。我想在线显示所有与模型相关的部分,并带有用于编辑它们的控件。对于基本字段,我自己很容易滚动,但我宁愿为内联模型的关联使用 form_filtering_select 部分,但我找不到任何文档来执行此操作。
【问题讨论】:
标签: ruby-on-rails model-view-controller rails-admin
您可以使用Nested Form
考虑一个 User 类,它从项目 reader 方法返回一个 Project 实例数组并响应 projects_attributes= writer 方法:
class User
def projects
[@project1, @project2]
end
def projects_attributes=(attributes)
# Process the attributes hash
end
end
请注意,fields_for 实际上需要 projects_attributes= writer 方法才能将 :projects 正确识别为集合,并在表单标记中设置正确的索引。
当 projects 已经是 User 上的关联时,您可以使用 accept_nested_attributes_for 为您定义 writer 方法:
class User < ActiveRecord::Base
has_many :projects
accepts_nested_attributes_for :projects
end
此模型现在可以与嵌套的 fields_for 一起使用。嵌套 fields_for 调用的块将针对集合中的每个实例重复:
<%= nested_form_for @user do |user_form| %>
...
<%= user_form.fields_for :projects do |project_fields| %>
<% if project_fields.object.active? %>
Name: <%= project_fields.text_field :name %>
<% end %>
<% end %>
...
<% end %>
这里是Reference 了解详情。
【讨论】:
那里有一个很酷的宝石,几乎可以满足您的需求。它被称为Nested Form Fields。它允许您在单个页面上编辑记录(连同它们的 has_many 关联)。它最酷的地方在于它甚至使用 jQuery 来动态添加/删除表单字段,而无需重新加载页面。查看 gems docs 以正确使用。希望对您有所帮助!
【讨论】: