我有一个列表模型,其中包含has_and_belongs_to_many个帖子,反之亦然。
我有一个联接表:
create_table :postings_lists do |t|
t.integer :posting_id
t.integer :list_id
end
用户有很多列表。 我已经通过以下方式验证了用户的列表唯一性:
validates :name, presence: true, uniqueness: {scope: :user_id}
在联接表中,如何验证:posting_id和:list_id的唯一性,以便发布不能多次属于某个列表?
我已经尝试在模型中添加了uniq:true和has_and_belongs_to_manys,但它混乱了,我尝试在列表模型中添加自定义验证,但它没有工作。
我认为最简单的方法就是验证联接表中的两个ID,但我不知道如果不创建模型就能做到这一点?
答案 0 :(得分:0)
我会使用has_many:through而不是HABTM。
class List < ActiveRecord::Base
has_many :postings
has_many :posts, through: :postings
end
class Posting < ActiveRecord::Base
belongs_to :list
belongs_to :post
validate :post_id, uniqueness: {scope: :list_id}
end
class Post < ActiveRecord::Base
has_many :postings
has_many :lists, through: postings
end
答案 1 :(得分:0)
我最后添加 uniq:true
has_and_belongs_to_many:帖子, uniq:true
has_and_belongs_to_many:列表, uniq:true
如果您使用像帖子这样的内容,这会导致一些问题,因为在对其执行“order_by”等其他操作之前,事情必须“不同”。
但您可以通过使用“map”等不同的查询来解决此问题。