通过关系栏

时间:2016-02-29 17:57:12

标签: ruby-on-rails ruby devise cancan

我的rails应用程序中有一个数据模型,许多用户可以注册该站点(由设计管理)并“订阅”选择(许多)小部件。我们的想法是他们只能看到他们订阅的小部件,我需要一些独特的方法来识别用户 - 小部件组合。然后我可以在cancan中定义能力。我有以下代码:

模型:

class User < ActiveRecord::Base
  has_many :subscriptions
  has_many :widgets, through: :subscriptions
end

class Widget < ActiveRecord::Base
  has_many :subscriptions
  has_many :users, through: :subscriptions
end

class Subscription < ActiveRecord::Base
  belongs_to :user
  belongs_to :widget
  # some sort of unique DB index
  validates_uniqueness_of :user_id, scope: :widget_id
end

然后这个ability.rb:

can :read, Widget do |widget|
  widget.subscriptions.where(user: user).any?
end

如何定义此唯一标识符,以便cancan

可以使用

0 个答案:

没有答案