Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何防止书签表中Rails中的重复记录?_Ruby On Rails_Ruby - Fatal编程技术网

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语句的内容,因为它没有失败处理。