ruby-on-rails - Rails 5:通过多选创建多个连接表项
问题描述
我正在使用has_many through:
关系来blogs
分类subcategories
via 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
但我觉得在这种情况下这是不对的。
有没有人实施过这样的事情?
解决方案
使用 Simple Form 的表单助手来创建选择。输入的 id 很重要。它应该是
subcategory_ids
<%= f.input :subcategory_ids, collection: Subcategory.all, input_html: { multiple: true } %>
允许 subcategory_ids 参数在
BlogsController
. 添加 subcategory_ids (array) 作为 permit 方法的最后一个参数。def blog_params params.require(:blog).permit(:foo, :boo, subcategory_ids: []) end
推荐阅读
- moodle - 在学生登录 Moodle 后执行额外验证
- spring-cloud-stream - 由于 Spring 集成依赖关系,LogConsumer Spring Cloud 功能失败
- php - array_merge 删除一个空字符串
- android - 找不到 git repo(库)
- spring-boot - Spring webflux 反应式 Mono::subscribe
- xcode - 深色模式下 UITableview 的 sectionIndexBackgroundColor 相关问题
- java - java中的数组是否是线程安全的:一个线程更改值,一个线程读取值?
- kotlin - 在 Jetpack Compose 中从另一种形状中切割一种形状
- react-native - 在 Web 浏览器中运行时,expo 无法编译使用?
- tensorflow - Tensorflow 2.4.0RC0/RC4 - Bazel 3.1.0'错误:配置值 cuda 未在任何 .rc 中定义'