我有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)
请给我一些建议,让主动管理员也保存类别!
祝福, 马特
答案 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)