如何防止书签表中的Rails中的重复记录?

时间:2014-05-27 18:46:10

标签: ruby-on-rails ruby

我有一个pins表格(如标准帖子),而users可以加入书签'每个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

谢谢!

1 个答案:

答案 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方法的结果。目前,无论书签是否被保留,您的应用程序都将表现相同,这可能会导致用户失去他的输入。