2013-10-24 150 views
0

我想一個規則套用到一個能力類訪問從相關模型屬性模型

在我的應用程序的每個用戶(除了管理員,但我們會忽略)belongs_to的做法,在其他模型中定義。

由於某種原因,這種做法可能會因爲某種原因而被暫停訪問。

我想在我的能力模型

if user.practice.suspended? 
can :read, Client, :practice_id => user.practice_id 
else 
can :manage, CLient, :practice_id => user.practice_id 
etc.... 

但出於某種原因說,雖然我可以用

user.practice_id 

在能力模型 我不能使用

user.practice.<attribute> 

解決方法的任何想法?

型號/ user.rb

belongs_to :practice 

型號/ practice.rb

實踐有許多用戶。 誰不會有實踐中的唯一用戶是那些角色:管理員

has_many :users 
+2

你是什麼意思*我不能使用*?你有錯誤嗎?究竟哪一個? – depa

+0

你能從你的模型發佈一些代碼嗎? –

+0

粘貼如何建立用戶和實踐之間的關係,如果你不能調用user.practice.attribute東西告訴我你已經建立了錯誤的關係。 – rmagnum2002

回答

0

我認爲你有關係的倒退。

應該是「用戶has_many(或has_one)練習」和「練習belongs_to用戶」。這將表示foreign_key(本例中爲user_id)實際上是在練習表中,而不是用戶表。

試試這個:

User.rb

has_one :practice 

Practice.rb

belongs_to :user 

創建遷移到添加USER_ID練習

add_column :practices, :user_id, :integer 

然後就可以調用練習用戶像這樣:

user.practice.x 
+0

每種做法(公司)都會有很多用戶。 因此,每個用戶都有practice_id,表示他們屬於哪種練習。我有沒有正確的方法? – Carpela

+0

好吧,我想這是有道理的......用戶可以屬於多種做法嗎? – derekyau

+0

不是。想象一下這家公司的所有用戶都來自該公司的客戶。所以任何用戶都是這種做法的僱員,因此只有1次練習。 – Carpela