gpt4 book ai didi

ruby-on-rails - Rails HABTM : Post. 仅每个用户的标题唯一性

转载 作者:行者123 更新时间:2023-12-02 03:40:29 24 4
gpt4 key购买 nike

在 Rails 4 中,我有一个典型的 HABTM 设置;

class Author < ActiveRecord::Base
has_and_belongs_to_many :posts
end

class Post < ActiveRecord::Base
has_and_belongs_to_many :authors
end

我想验证 Post.title 的唯一性,但仅在每个 Author 的基础上。所以;

  • 作者 #1 可以有 Post.title 'My Post'
  • 作者 #2 可以有 Post.title 'My Post'
  • 但是,作者 #1 无法创建第二个标题为“我的帖子”的帖子

一个 Post 允许有多个 Author 所以我不能只有一个 belongs_to 并使用 validates_uniqueness_of : title, scope: :author_id 我不确定如何最好地使用 HABTM 来做到这一点。

这是否可以通过 validates 实现,或者我是否需要一个 callback 首先检查相关的 Author 是否有匹配的 Post .title 保存前?


编辑

我使用以下迁移来设置连接表;

class CreateAuthorsPosts < ActiveRecord::Migration
def change
create_table :authors_posts, id: false, force: true do |t|
t.belongs_to :author, index: true
t.belongs_to :post, index: true
end
add_index :authors_posts, [:author_id, :post_id], unique: true
end
end

最佳答案

我不相信你可以用预定义的验证器做你想做的事。

您可以定义使用自定义方法的验证(请参阅 Active Record Validations documentation)

有点像

class Post < ActiveRecord::Base
has_and_belongs_to_many :authors
validate :uniqueness_of_title_and_author

def uniqueness_of_title_and_author
if author.posts.where(title: self.title).exists?
errors.add(:title, "must be unique")
end
end

end

每次为 Post 调用 #valid? 时都会检查它

关于ruby-on-rails - Rails HABTM : Post. 仅每个用户的标题唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20379530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com