0

クラブのメンバーシップの has_many 関係を想像してみてください。

end
class Club < ActiveRecord::Base
  has_many :memberships, :dependent => :destroy
  has_many :users, :through => :memberships
  validates :name, :is_enrollable, :presence => true
end
class Membership < ActiveRecord::Base
  belongs_to :club
end

また、Club のis_enrollableテーブルにブール フィールドがあるとします。true の場合、ユーザーはそのクラブに関連付けられたメンバーシップを作成できます。false の場合、管理者のみがメンバーシップ レコードを作成できます。

私の質問は、これを反映するように CanCan の capability.rb をどのように設定しますか?

コメント: クラブ テーブルのフィールドがメンバーシップ レコードを作成する機能を制御するという点で、少し変わっています。これは機能しません:

can :create, Membership, :club => {:is_enrollable => true}

...メンバーシップは作成前に存在しないためです。 編集:そうではありません-CanCan、承認する前に保存されていないレコードで機能します。以下の回答を参照してください。

4

1 に答える 1

0

(この質問は下手なので撤回するつもりでしたが、答えを見つけて役に立つかもしれないと思いました。)

:create の能力で次の句を作成できます。

can :create, Membership, :club => {:is_enrollable => true}

これが機能するのは、MembershipsController で、CanCan が新しい (保存されていない) メンバーシップ モデルを構築し、それを承認して、効果的に次のことを行うためです。

@membership = Membership.new(params[:membership])
raise <some error> unless Ability.new(user).can?(:create, @membership)
# if we've gotten this far, we can now save the membership
@membership.save

少なくとも、それが起こっていると思います。

于 2012-04-23T22:31:11.430 に答える