我有一个pins
表格(如标准帖子),而users
可以加入书签'每个pin
。但是,我希望阻止users
多次为同一pin
添加书签,因为它会创建重复的记录。
书签表格如下:
这不仅仅是实际内容,只是pin_id
和user_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
谢谢!
答案 0 :(得分:4)
您可以添加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所提到的,你应该在你的create语句中将你的流量分配给save
方法的结果。目前,无论书签是否被保留,您的应用程序都将表现相同,这可能会导致用户失去他的输入。