我试图在连接表中插入一行,这是我在此迁移中创建的(带时间戳):
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
这是我将NewsItem插入用户的方式:
@user.news_items << @news_item
第一次成功插入。但如果我再次插入相同的记录,它会显示UniqueViolation。
如何制作相同的插件,更新时间戳,而不是抛出UniqueViolation错误?
答案 0 :(得分:2)
您不想再次插入,您想要更新连接表。
根据rails guides如果您需要使用联接表,它应该拥有自己的模型:
最简单的经验法则是你应该设置一个has_many :如果你需要使用关系模型,通过关系 作为一个独立的实体。如果你不需要做任何事情 关系模型,设置一个可能更简单 has_and_belongs_to_many关系(虽然你需要记住 在数据库中创建连接表。)
因此,创建模型并使用has_many_through。
然后你就可以做到:
item = UserNewsItem.find_by(news_id: x, user: y)
item.update_attribute(:updated_at, Time.now)