これを支援できる人は誰もいませんか?
Rails3.2アプリでcancanを使用してレコードを見つけるのに問題があります。
'nas'インデックスで、current_userの場所に属する'nas'のリストを表示しようとしています。
問題は、ユーザーとnasの間に正式な関係がないことであるようです。場所がnasを所有し、ユーザーが場所を所有します。
NASコントローラーでaccessible_byメソッドを使用すると、異常な結果が得られます。私のability.rbで以下を使用すると、エラーが発生します:
can :read, Nas, :locationusers => { :user_id => user.id }
Error: undefined method `class_name' for nil:NilClass
そして、私がに変更した場合:
can :read, Nas, :locations => { :user_id => user.id }
ユーザーの最初の場所のNASのみが表示されます。
たとえば、ユーザーがids = 1,2,3の場所を持っている場合、場所1のnasのみが表示されます。
cancanを使用して現在のユーザーの場所のすべてのNASを表示する方法はありますか、それとも別の方法で行う必要がありますか?
私の関係は次のとおりです。
class User < ActiveRecord::Base
...
has_many :locationusers
has_many :locations, :through => :locationusers
...
end
class Location < ActiveRecord::Base
...
has_many :locationusers
has_many :users, :through => :locationusers
has_many :nas
...
end
class Node < ActiveRecord::Base
...
belongs_to :location
end
私のability.rbで:
...
if user.role? :customer_admins
can :read, Nas, :locations => { :user_id => user.id }
..
NasController
@nas = Nas.accessible_by(current_ability).all