【发布时间】:2017-03-01 22:58:26
【问题描述】:
为什么我不能更新属性,因为我没有更新唯一字段?
urlmd5 和 url 都有唯一性验证:
validates :url, presence: true, uniqueness: true
validates :urlmd5, presence: true, uniqueness: true
这个作品:
ParserUrl.where(urlmd5: p[:urlmd5]).first_or_initialize.update_attributes!(
user_id: item.user_id, parser_id: item.parser_id
)
这不起作用:
ParserUrl.where(url: p[:url], urlmd5:p[:urlmd5]).first_or_initialize.update_attributes!(
user_id: item.user_id, parser_id: item.parser_id
)
I got error 'unable to update existing record'...
是first_or_initialize.update_attributes!正确的处理方法是什么?
【问题讨论】:
-
你能给出完整的错误信息吗?在这种情况下,
p到底是什么? -
我猜你有一条记录,它已经在 url 中获得了 p[:url] 值或在 urlmd5 中获得了 p[:urlmd5] 值,但不是两者都有。所以 first_or_initialize 并没有找到两者的组合,所以初始化记录也是如此,但唯一性约束仍然适用于其中一个字段。
-
您是否希望仅在两个字段的组合上具有唯一性?您需要更改验证。
validates :urlmd5, presence: true, uniqueness: {scope: :url}反之亦然。 -
@SteveTurczyn 看看我的回答
标签: ruby ruby-on-rails-4 update-attributes