我想重写手动逻辑以更新表以使用嵌套属性,同时使用第三个表选择多个 id 值。这是我第一次尝试这个。
我有一个 MediaLibrary 模型。我有一个包含名称的 PageTitle 模型。我有一个 MediaPage 模型,其中包含 MediaLibrary 和 PageTitle 的 id 字段。我想使用嵌套属性填充 MediaPage。我想为 PageTitle 创建一个 collection_select,它具有填充 page_title_id MediaPage 的值。
这是我的模型定义。
媒体库.rb
has_many :media_pages, dependent: :destroy
accepts_nested_attributes_for :media_pages, allow_destroy: true
media_page.rb
belongs_to :media_library
validates :media_library_id, presence: true
validates :page_title_id, presence: true
page_title.rb
has_many :media_pages
我手动收集值时的原始视图代码如下。
<%= fields_for :media_pages do |media_page| %>
<%= media_page.label :media_page, "Page Titles" %><%= media_page.collection_select(:page_title_id, PageTitle.order("name"), :id, :name, {}, {multiple: true}) %>
<% end %>
这是我目前的看法:
<%= f.label :media_pages, "Page Titles" %>
<%= f.fields_for :media_pages do |media_page| %>
<%= media_page.collection_select(:page_title_id, PageTitle.order("name"), :id, :name, {}, {multiple: true}) %>
<% end %>
如果我有多个 MediaPage 行,则视图将为每一行显示一个 collection_select 列表。例如,如果我有两个 MediaPage 行,我将看到一个 collection_select 列表,其中第一个记录的 PageTitle 名称突出显示,第二个 collection_select 列表,第二个记录的 PageTitle 名称突出显示。正如您所看到的,我从第一个 fields_for 语句和第二个更改的唯一内容是(1)将标签移到 fields_for 之外和(2)添加 f。
我在 Rails 3 Rails 3.2.13 - Delete Entry From Nested Attributes中尝试了类似的东西。当我在 Rails 3 中尝试此操作时,collection_select 仅显示一个列表,其中突出显示了多行。由于空白数组条目存在问题,我决定继续手动更新中间表。
我想要的是在我的视图上显示一个 collection_select 列表,其中可以选择多个 PageTitle id 并使用嵌套属性填充 MediaPage 表。如果存在行,我希望突出显示相应的 PageTitle 行。
我一直试图解决这个问题很长一段时间。通过我的研究,我没有发现任何使用单独的表填充嵌套属性的示例。
任何帮助,将不胜感激。