我尝试使用选择和多对多关系构建表单,以存储帖子>类别,我有一些麻烦
1.-当我创建帖子时,我收到此消息未经许可的参数:类别
2.-帖子是商店但不保存的类别
这是我的代码 的 post.rb
class Post < ActiveRecord::Base
...
has_many :post_has_categories
has_many :categories, through: :post_has_categories
accepts_nested_attributes_for :post_has_categories,
reject_if: :all_blank,
allow_destroy: true
serialize :category_ids, Array
attr_accessor :categories
# Virtual attributes
def categories=(ids)
self.category_ids = ids.split(",").map(&:strip)
end
end
post_has_category.rb
class PostHasCategory < ActiveRecord::Base
belongs_to :post
belongs_to :category
accepts_nested_attributes_for :post
end
categories.rb
class Category < ActiveRecord::Base
...
has_many :post_has_categories
has_many :posts, through: :post_has_categories
end
我的部分帖子#_form 使用此
调用数据<%= f.select :categories, Category.all.map { |c| [c.name_category, c.id] },{}, { class: 'form-control', multiple: true } %>
在strong_parameters中我的 posts_controller 我有这个
params.require(:post).permit(..., post_has_categories_attributes: [ :post_id, :category_ids ])
答案 0 :(得分:0)
在你的帖子#form partial中,你应该用fields_for
方法包装你的select元素:
<%= f.fields_for :has_categories do |hc| %>
<%= hc.select %>
<%= hc.select :category_id, Category.all.map { |c| [c.name_category, c.id] },{}, { class: 'form-control', multiple: true } %>
<%= end %>
这将确保正确命名select方法以传递嵌套属性。