【问题标题】:Rails 5: Create Multiple Join Table Items via Multiple SelectRails 5:通过多选创建多个连接表项
【发布时间】:2019-11-07 20:46:38
【问题描述】:

我使用has_many through: 关系通过blog_categorizationsblogs 分类为subcategories

我已正确设置所有模型:

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。我想使用hidden_field,但我觉得在这种情况下这是不对的。

有没有人实现过类似的东西?

【问题讨论】:

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


    【解决方案1】:
    1. 使用简单表单的表单助手来创建选择。输入的 id 很重要。应该是subcategory_ids

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

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

    【讨论】:

    • 但我需要的是连接表...BlogCategorization...对吗?这不是砍掉中间人吗?
    • @Liz 您不应该为连接表(BlogCategorization)创建记录。 Rails 已经在 has_many through 关系中管理它。
    • 好的,有道理。但是,当我使用 f.input 时,您建议唯一可见的是标签……它实际上根本没有显示表单项。
    • 即使在我的 blogs 表中添加了一个额外的列(当然:subcategory_ids: [] 添加到我的许可参数中,subcategory_ids 仍然作为未经许可的参数出现并且不保存...跨度>
    • @Liz 你不应该创建 subcategory_ids 字段。可以分享一下博客表单和 blog_params 方法吗?
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多