0

我有以下型号。

我不希望User可以多次订阅同一个App

所以这应该是不可能的:

User.last.apps
=> [#<App id: 78, name: "Name">, #<App id: 78, name: "Name">]


User.last.subscriptions
=> [#<Subscription id: 78, app_id: 78>, #<Subscription id: 79, app_id: 78>]

楷模

User
  has_many :subscriptions, :dependent => :destroy
  has_many :apps, through: :subscriptions

Subscription
  validates :user_id, uniqueness: { scope: :app_id }
  belongs_to :user, touch: true
  belongs_to :app 

App  
  validates_uniqueness_of :name  
  belongs_to :user, touch: true
  belongs_to :app    
4

2 回答 2

1

您可以向关联添加唯一约束:

has_many :apps, through: :subscriptions, uniq: true
于 2013-01-23T19:12:11.097 回答
0

我在订阅表中向数据库添加了唯一索引。

add_index :subscriptions, [:user_id, :app_id], unique: true
于 2013-01-24T17:44:09.887 回答