ActiveAdmin不会保存很多并且属于很多字段

时间:2013-06-19 20:37:35

标签: activeadmin has-and-belongs-to-many

我有2个型号。类别和帖子。它们使用has_many_and_belongs_to_many关系进行连接。我检查了rails控制台,这种关系有效。

我在activeadmin中创建了复选框,使用此表单字段设置帖子类别:

f.input :categories, as: :check_boxes, collection: Category.all

问题是当我尝试保存它时因为保存了所有其他字段数据(标题,正文,元信息等),但即使我取消选中它,或者也检查了另一个类别,该类别保持不变。

我正在使用这样的强参数:

post_params = params.require(:post).permit(:title,:body,:meta_keywords,:meta_description,:excerpt,:image,:categories)

请给我一些建议,让主动管理员也保存类别!

祝福, 马特

3 个答案:

答案 0 :(得分:10)

在AA中试试这个:

    controller do
      def permitted_params
        params.permit post: [:title, :body, :meta_keywords, :meta_description, :excerpt, :image, category_ids: []]
      end
    end

答案 1 :(得分:4)

在/app/admin/post.rb中添加这样的内容:

ActiveAdmin.register Post do
  permit_params :title, :body, :meta_keywords, :meta_description, :excerpt, :image, category_ids: [:id]
end

如果您正在使用accepts_nested_attributes_for,那么它将如下所示:

ActiveAdmin.register Post do
  permit_params :title, :body, :meta_keywords, :meta_description, :excerpt, :image, categories_attributes: [:id]
end

答案 2 :(得分:0)

我已经测试过,这可能适合你和其他人

# This is to show you the form field section
form do |f|
    f.inputs "Basic Information" do
        f.input :categories, :multiple => true, as: :check_boxes, :collection => Category.all
    end
    f.actions
end

# This is the place to write the controller and you don't need to add any path in routes.rb
controller do
    def update
        post = Post.find(params[:id])
        post.categories.delete_all
        categories = params[:post][:category_ids]
        categories.shift
        categories.each do |category_id|
            post.categories << Category.find(category_id.to_i)
        end
        redirect_to resource_path(post)
    end
end

如果你也使用强参数,请记住允许属性(参见上面的zarazan答案:D)

摘自http://rails.hasbrains.org/questions/369