我正试图将一行插入到我在这次迁移中创建的联接表中(带有时间戳):

class CreateUserNewsItemJoinTable < ActiveRecord::Migration
  def change
    create_join_table :users, :news_items do |t|
      t.timestamps
    end

    add_index :news_items_users, [:user_id, :news_item_id], unique: true
  end
end

我就是这样向用户插入新闻项的:
@user.news_items << @news_item

第一次成功插入。但如果我再次插入同一个记录,它将显示唯一的违规。
我如何使相同的插入,更新时间戳,而不是抛出唯一的违规错误?

最佳答案

您不想再插入,您想更新联接表。
根据rails guides如果您需要使用join表,它应该有自己的模型:
最简单的经验法则是你应该建立一个
:如果需要使用关系模型,则通过关系
作为一个独立的实体。如果你不需要
关系模型,建立一个
你和你有很多关系吗(尽管你需要记住
在数据库中创建联接表)。
因此,创建模型并使用a has_many_through。
然后您将能够:

item = UserNewsItem.find_by(news_id: x, user: y)
item.update_attribute(:updated_at, Time.now)

关于ruby-on-rails - Rails句柄联接表UniqueViolation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25640891/

10-13 05:21