2015-09-07 47 views
0

是否可以通過引用另一個異能來定義CanCanCan異能?Rails 4 - cancancan - 定義能力

例如,我有模型稱爲項目和項目問題。

我想讓一類用戶閱讀項目,然後如果他們可以閱讀項目,那麼他們可以創建項目問題。

我已經定義了能力,爲用戶閱讀項目爲:

can :read, Project, 
     {:active => true, 
     :closed => false, 
     :sweep => { :disclosure => { :allusers => true }} 
     } 

現在,我想確定創建項目問題的能力。我想知道你是否可以說,沿着線的東西:

if can :read, Project, can :create, ProjectQuestion 

我也試過:

can [:create, :read], ProjectQuestion do |pq3| 
     if can :read Project 
     end 

是否有可能參照定義一個能力,另一個呢?

PS:這不是我關於cancancan的其他問題的重複,它是通過引用db中的屬性來尋求表達能力的語法方面的幫助。

+0

[Rails的4 - CanCanCan - 語法]的可能重複(http://stackoverflow.com/questions/32431123/rails-4-cancancan-syntax) –

+0

喜 - 無不是一我的另一個問題的重複。我有幾個關於cancancan的問題。你建議的問題是重複的是我問的一個是不同的問題 – Mel

回答

0

假設還有的has_many/belongs_to的類型assciation的,你可以很容易地做到這一點是這樣的:

,你必須檢查的能力之前分配PROJECT_ID新project_question
can [:create, :read], ProjectQuestion do |project_question| 
    can? :read, project_question.project 
end 

心靈。

所以在您的控制器/視圖你不能做

can? :create, ProjectQuestion.new 

,因爲它總是會返回false。你將不得不做的事:

can? :create, some_project.project_questions.new 
+0

太棒了。非常感謝。它非常有意義。 – Mel