首页 > 解决方案 > Rails 5:通过多选创建多个连接表项

问题描述

我正在使用has_many through:关系来blogs分类subcategoriesvia blog_categorizations

我已经正确设置了所有模型:

class Blog < ApplicationRecord
  has_many :blog_categorizations
  has_many :subcategories, through: :blog_categorizations
end

class Subcategory < ApplicationRecord
  has_many :blog_categorizations
  has_many :blogs, through: :blog_categorizations
end

class BlogCategorization < ApplicationRecord
  belongs_to :blog
  belongs_to :subcategory
end

但现在我无法在我的blogs/_form. 我有以下多项选择:

<select class="mdb-select colorful-select dropdown-primary md-form" multiple searchable="Search here...">
  <%= Subcategory.all.each do |sub| %>
    <option value="<%= sub.id %>"><%= sub.name %></option>
  <% end %>
</select>
<label class="mdb-main-label">Subcategories</label>

哪个正确呈现可能的子类别列表,但现在我无法弄清楚如何blog_categorization为每个选定的子类别创建一个新的。我想使用 ahidden_field但我觉得在这种情况下这是不对的。

有没有人实施过这样的事情?

标签: ruby-on-railsruby-on-rails-5simple-form

解决方案


  1. 使用 Simple Form 的表单助手来创建选择。输入的 id 很重要。它应该是subcategory_ids

    <%= f.input :subcategory_ids, collection: Subcategory.all,
                                  input_html: { multiple: true } %>
    
  2. 允许 subcategory_ids 参数在BlogsController. 添加 subcategory_ids (array) 作为 permit 方法的最后一个参数。

    def blog_params
      params.require(:blog).permit(:foo, :boo, subcategory_ids: [])
    end
    

推荐阅读