0
class Post  
  has_many :post_categories  
  has_many :categories, :through => :post_categories
end

class PostCategory
 belongs_to :post  
 belongs_to :category
end  

class Category
 has_many :post_categories
 has_many :posts, :through => :post_categories
end  

这是一个 has_many through 关系,其中 post_categories 是连接表。

Post 模型中有一个名为 :title 的字段。我需要确保帖子中的所有标题对于给定类别都是唯一的。我将如何根据连接表中的 category_id 执行验证?

4

1 回答 1

0

我认为这应该有效,但还没有尝试过。

验证:unique_title

def unique_title
  if self.new_record?
    self.errors.add(:title, "is taken") if self.category.posts.where(:title => self.title).exists?
  else
    self.errors.add(:title, "is taken") if self.category.posts.where("title = '#{self.title}' and id NOT IN (#{self.id})").exists?
  end
end
于 2013-05-02T05:12:44.920 回答