gpt4 book ai didi

ruby-on-rails - 如何防止书签表中 Rails 中的重复记录?

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:23 25 4
gpt4 key购买 nike

我有一个pin 表(类似于标准帖子)并且用户 能够为每个pin 添加“书签”。但是,我想阻止 users 多次为同一个 pin 添加书签,因为它会创建重复的记录。

书签表如下所示:

enter image description here

它没有这样的实际内容,只是 pin_iduser_id 之间的关系。我想它们是我想避免重复的两个字段。

在我的应用中,书签是图钉下的嵌套资源,如下所示:

resources :pins, :path => "pin" do
resources :bookmarks, :path => "bookmark"
end

避免重复的最佳方法是什么?

我的创建语句是:

def create

@pin = Pin.find(params[:pin_id])

@bookmark = @pin.bookmarks.build(:user_id => current_user.id)
@bookmark.save

end

这将保存一条记录,其中包含用户登录的 id。

我的书签模型:

class Bookmark < ActiveRecord::Base

belongs_to :user
belongs_to :pin

end

谢谢!

最佳答案

可以添加uniqee验证:

class Bookmark < ActiveRecord::Base

belongs_to :user
belongs_to :pin

validates :pin_id, uniqueness: { scope: :user_id }

end

但是,您还需要在数据库中设置唯一索引,因为所有验证都可能成为条件竞争的主题。

add_index :bookmarks, [:pin_id, :user_id], unique: true

更新:

正如@engineersmnky 所提到的,您应该根据创建语句中 save 方法的结果 fork 您的流程。目前,无论书签是否已保留,您的应用程序都将表现相同,这可能会导致用户丢失他的输入。

关于ruby-on-rails - 如何防止书签表中 Rails 中的重复记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896777/

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