2011-07-26 10 views
4

を処理するために、Railsのカンカン宝石を使用して:そのhas_and_belongs_to_manyレストランとその逆私は、次のしているhas_and_belongs_to_manyアソシエーションの状況

  • Userモデルを。
  • レストランモデルthat has_and_belongs_to_many食事とその逆。私ability.rbファイルで

、私は、ユーザーがレストランの食事氏「has_and_belongs_to」(user.restaurantsですなわちレストランを)だけで管理できるように指定します。

私は今、この権利を持っている:

class Ability 
    include CanCan::Ability 
    def initialize(user) 
    # a user can only manage meals of restaurants he has access to 
    can :manage, Meal do |meal| 
     meal.restaurant_ids & user.restaurant_ids #...this doesn't work... 
    end 
    end 
end 

これを行うための最善の方法は何ですか?

私はhttps://github.com/ryanb/cancan/wiki/Defining-Abilities-with-Blocksと相談しましたが、まだ分かりません。

答えて

7

配列の "&"演算子は常に配列を返します。空の配列はfalseと見なされないので、常に通過します。存在するかどうかを確認してください(空白ではありません)。

(meal.restaurant_ids & user.restaurant_ids).present? 
+0

応答ありがとうございます。私はすぐにこれを試してみるでしょう。好奇心の外に、このプレゼント()メソッドはどこに定義されていますか? Ruby Arrayのドキュメントにはありません。 – dmonopoly

+0

ああ、見つかったのです.... http://api.rubyonrails.org/classes/Object.html#method-i-present-3F:] – dmonopoly

+0

古いコメントを残して申し訳ありません質問。私がフォーム上で ':create'アクションを実行していて、どのレストランが食事に属しているかをチェックボックスでチェックしているのであれば、私が所有する1つのレストランIDと1を送信することでシステムを偽装することは可能でしょうか?そうじゃない? 1つの正しいIDが存在するため、上記の条件はtrueを返します。 –

関連する問題