Ruby on rails 如何防止书签表中Rails中的重复记录?
我有一个Ruby on rails 如何防止书签表中Rails中的重复记录?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个pins表(类似于标准帖子),而且用户可以为每个pin添加书签。但是,我想阻止用户多次为同一pin添加书签,因为它会创建重复的记录 书签表如下所示: 它不需要实际内容,只需要pin\u id和用户id之间的关系。我想这是我想避免重复的两个领域 在我的应用程序中,书签是PIN下的嵌套资源,如下所示: resources :pins, :path => "pin" do resources :bookmarks, :path => "bookmark" end 避免重
pins
表(类似于标准帖子),而且用户可以为每个pin
添加书签。但是,我想阻止用户
多次为同一pin
添加书签,因为它会创建重复的记录
书签表如下所示:
它不需要实际内容,只需要pin\u id
和用户id
之间的关系。我想这是我想避免重复的两个领域
在我的应用程序中,书签是PIN下的嵌套资源,如下所示:
resources :pins, :path => "pin" do
resources :bookmarks, :path => "bookmark"
end
避免重复的最佳方法是什么
我的create语句是:
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
更新:
正如@engineersmnky所提到的,您应该在create语句中对save
方法的结果进行分流。当前,无论书签是否已持久化,应用程序的行为都将相同,这可能会导致用户丢失输入。您可以添加uniqee验证:
class Bookmark < ActiveRecord::Base
belongs_to :user
belongs_to :pin
validates :pin_id, uniqueness: { scope: :user_id }
end
更新:
正如@engineersmnky所提到的,您应该在create语句中对save
方法的结果进行分流。目前,无论书签是否被保留,您的应用程序都将表现相同,这可能会导致用户丢失输入。该死,您比我快了4秒,我发布了相同的word+1代码。你可能想添加一点关于他的create语句的内容,因为它没有失败处理。该死的,你比我快了4秒,我发布了与word+1完全相同的代码。您可能需要添加一点关于他的create语句的内容,因为它没有失败处理。