1

エージェンシーというモデルを持っていhas_many :usersます。ユーザーはロール:agent、:admin を持つことができるので、@agency.users のサブセットをプルするメソッドを作成しました。

Agency.rb
def agents
  users.with_roles(:agent, self)
end

私が望んでいるのは、事実上、f.association :agents, collection: User.allエージェンシーが誰でも雇えるようにすることです。これを試すと、当然のことながら、「Association :agents not found」が表示されます。に変更してf.association @agency.agents, collection: User.allも失敗します"Association #<ActiveRecord::AssociationRelation .....not found"

this questionから、simpleform は AssociationRelation を処理できず、Association のみを処理できるようです。

アソシエーションのみを返すようにメソッドを変更できますか? AssociationRelation を処理するように simpleform を変更できますか?

4

1 に答える 1

2

したがって、解決策は少しハックであることが判明しましたが、うまくいくようです:

メソッドではなく関連付けである必要がありますが、関連付けをスコープできることがわかりました

Agency.rb
has_many :bridge_roles, -> {where(resource_type: 'Agency')}, class_name: 'Role', foreign_key: :resource_id
has_many :agents, -> {where('roles.name=?', 'agent')}, class_name: 'User', through: :bridge_roles, source: :users

重要なのは、アソシエーションが roify の役割を認識できるように明示的にブリッジを作成したことです。それを介して、関心のある一連のユーザーにアクセスできます。

于 2014-05-02T18:01:45.653 に答える