2013-06-03 102 views
2

一個Form belongs_to的UserGroup內限制物品的數量。某些角色無法創建多於一個的Form,其類型爲「每個UserGroup」的「improvement_points」。我想用CanCan(1.6.x)來實現它。但是如何?使用慘慘的關係

在我的視圖和控制器我想能夠說:

link_to("New Form", new_form_path) if can? :create, Form, @user_group 

或任何類似,像Form.new(:user_group => @user_group)就行了。

有關部分從我ability.rb:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    if user.is_coach? 
     cannot :create, Form, :type => "improvement_points" do |form| 
     # Allow no more than one Form per group. 
     Form.where(:user_group_id => user_group.id).count > 0 
     end 
    end 
    end 
end 

問題是,我不知道如何爲 user_group_id的背景下通過。我試圖Rianbs description on this,但這似乎不適用於我的情況,因爲我需要專門檢查要創建的項目數量。

cancan是正確的工具嗎?我已在Form model上進行了一些驗證,以在較低級別強制實施這種每組一次的行爲;我應該問形式模型而不是能力?

回答

0

也許康康可以做到這一點,但感覺就像你在推它。我只是把這個邏輯放在控制器中。

def create 
    if condition_that_is_hard_to_write_in_ability_rb? 
    raise CanCan::AccessDenied, "Helpful message about what to do instead" 
    end 
end