无法保存在rails中选择使用的nested_attributes

时间:2016-11-14 22:34:03

标签: ruby-on-rails ruby nested-attributes jquery-chosen

我尝试使用选择和多对多关系构建表单,以存储帖子>类别,我有一些麻烦

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 ])

1 个答案:

答案 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方法以传递嵌套属性。

更多信息:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for-label-Nested+Attributes+Examples