我正在使用rails(3.7.8)应用并使用主动管理员来管理ff模型的资源:
class AdminUser < ActiveRecord::Base
has_many :user_article_categories, :include => :article_categories
has_many :article_categories, :through => :user_article_categories,
:source => :admin_user
has_many :articles, :through => :user_article_categories,
:source => :admin_user
# ...
end
class UserArticleCategory < ActiveRecord::Base
belongs_to :admin_user
belongs_to :article_category
attr_accessible :admin_user_id, :article_category_id, :included
attr_accessor :included
after_find :set_included
private
def set_included
self.included = "1"
end
# ...
end
“包含”属性基于解决方案presented here
class ArticleCategory < ActiveRecord::Base
has_many :user_article_categories, :include => :admin_users
has_many :admin_users, :through => :user_article_categories,
:source => :article_category
has_many :articles, :through => :user_article_categories,
:source => :article_category
# ...
end
但我似乎没有(正确地)设置admin_users的表单,这样创建一个新的admin_user会将所有article_categories显示为复选框列表
虽然持久化的admin_user for update会显示所有article_categories复选框,但会检查所有先前设置的文章类别,以便更新将删除未选中的复选框并将新选中的复选框添加到连接表的内容
for admin / admin_users.rb我创建了如下表单,这不起作用,虽然它渲染正确,任何帮助将不胜感激
form do |f|
if f.object.persisted? and current_admin_user.id == f.object.id
f.inputs "Admin Details" do
f.input :email
f.inputs :for => user_article_categories do |usr_art_catr|
usr_art_catr.input :article_category_id, :hidden
usr_art_catr.input :included
end
end
else
f.inputs "Admin Details" do
f.input :email
f.input :superuser, :label => "Super User Priveleges"
f.input :article_categories, :as => :check_boxes,
:collection => ArticleCategory.select("id, name")
end
end
f.buttons
end
答案 0 :(得分:0)
实际上,要显示所有article_categories的复选框列表,并检查更新时给定admin_user的所有已检查文章类别。
Formtastic,在渲染表单对象的show表单时,通过
调用表单对象上提供的方法f.input :method_to_be_called, :as => :checkboxes
哪个formtastic会将其结果与通过提供的集合进行比较
:collection => any_valid_ruby_object
但两者都应该返回相同的种类;数组/数组或散列/散列,无论如何,通过对两个集合执行差异来确定应检查哪些复选框。
formtastic调用的方法可以是admin_user上的一个实例方法,用于查询连接表,确定应检查哪些复选框,并从相关的article_categories表构建一个数组,或者在没有时返回一个空数组。
这允许formtastic做正确的事,至少在这种情况下。此解决方案使user_article_categories(join-table)上的“included”属性变得多余!