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
「含まれる」属性は、ここに示されているソリューションに基づいています
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では、すべてのarticle_categoriesチェックボックスが表示されますが、以前に設定されたすべての記事カテゴリがチェックされているため、更新により、チェックされていないチェックボックスが削除され、新しくチェックされたチェックボックスが結合テーブルに追加されます。
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