0

DeviseとRolifyを使っています。

従業員belongs_to Userとユーザーhas_one :employee。User モデルにはrolify.

Rolifyのおかげで、 というテーブルがありますuser_roles

次のコードは正常に動作します。

<% if current_user.has_role? :super %>

これは、従業員ではなくユーザーに関連付けたい場合に機能します。

:collection => User.with_role(:agent)

ここで、「エージェント」の役割を持つ従業員の選択を含むフォームに関連付けを作成したいと思います。

次の試行は機能しません。

<%= f.association :employee, :collection => Employee.user.with_role(:agent), :label_method => :employee_full_name, :label => 'Agent' %>

上記のものはこのエラーを与えます:

undefined method `user' for #<Class:0x007fac48215ee8>

これも機能しません:

<%= f.association :employee, :collection => User.with_role(:agent).employee.id, :label_method => :employee_full_name, :label => 'Agent' %>

何がうまくいくでしょうか?

助けてくれてありがとう!

更新1

以下は、関連付けられた役割を持つ従業員のリストを表示するために機能します。

<td><%= employee.user.roles.first.name %></td>

更新2

employee.user.roles.first.name従業員の役割名を教えてくれるので、これを試しました:

Employee.where('employee.user.roles.first.name = ?', 'agent')

しかし、PGエラーが発生します=

PG::Error: ERROR:  improper qualified name (too many dotted names): employee.user.roles.first.name
4

3 に答える 3

1

Employee.user.with_role(:agent)

エージェントの役割を持つすべての従業員を元に戻します。最初の 2 つの問題は、 'rolified' されていない方を呼び出しhas_roleていることです。Employee

于 2013-07-11T20:43:18.620 に答える
0

クラス Employee に対してインスタンス メソッド 'user' を呼び出そうとしています。あなたが言ったように、 Employee が user に属している場合、そこに参加したいと思うでしょう ( User モデルに has_one :employee という関係があると仮定しています):

Employee.joins(:user => :user_roles).merge(User.with_role(:agent))

または

Employee.joins(:user => { :user_roles => :roles}).merge(User.with_role(:agent))
于 2013-08-21T20:40:13.010 に答える
0

ここに行きます。

Employee.joins(:user).where(:employees => { :user_id => User.with_role(:agent) })

于 2013-08-25T23:08:34.277 に答える