我正在尝试检查记录是否陈旧,如果是,则更新。这是我的代码:
IN
我收到以下错误:
@listing = Listing.where(listing_id: listing['listing_id'])
if @listing.exists?
if @listing.created_at < 7.days.ago # line where error shows
@listing.update(state: listing['state'])
end
end
这是我的数据库记录:
undefined method `updated_at' for #<Listing::ActiveRecord_Relation:0x00007fb3ebabbac0> Did you mean? update_all
我的迁移:
<Listing id: 5, listing_id: 188996174, state: "active", created_at: "2018-03-13 20:43:35", updated_at: "2018-03-13 20:46:48">
有什么想法吗? 提前谢谢!
答案 0 :(得分:1)
使用where
,您将获得ActiveRecord_Relation:
@listing = Listing.where(listing_id: listing['listing_id'])
你想要一个对象。
我不确定你究竟是如何设置的,但假设listing_id列是唯一的,那么下面应该做的就是:
@listing = Listing.find_by(listing_id: listing['listing_id'])
你的其余代码没问题。因为它只返回匹配listing-id的第一个对象。那么你可以尝试在这个对象上调用updated_at
如果它们不是唯一的,您可能需要执行以下操作:
@listings = Listing.where(listing_id: params['listing_id'])
@listings.each do |listing|
listing.update(state: params['state']) if listing.created_at < 7.days.ago
end
或更短:
Listing
.where(
'listing_id = ? AND updated_at > ?',
params['listing_id'],
Time.zone.now - 7.days
)
.update_all(state: params['state'])