Я использую Rails 3 для этого. У меня есть модель коллекций, модель пользователя и модель промежуточной подписки. Таким образом, пользователь может подписаться на несколько коллекций с определенной ролью. Однако я не хочу, чтобы пользователь мог подписываться на одну и ту же коллекцию дважды.
Итак, в моей модели подписки есть что-то вроде:
validate :subscription_duplicates
def subscription_duplicates
self.errors.add_to_base "This user is already subscribed" if Subscription.where(:user_id => self.user.id, :collection_id => self.collection.id)
end
Однако это кажется уродливым. Кроме того, он прерывается, когда я хочу сделать что-то вроде следующего в моем контроллере коллекции:
def create
@collection = Collection.new(params[:collection])
@collection.subscriptions.build(:user => current_user, :role => Subscription::ROLES['owner'])
@collection.save
respond_with(@collection)
end
Когда я делаю сборку, у подписки нет идентификатора, поэтому я получаю ошибку "Called id for nil".
Спасибо за любые советы!