Ruby on rails rails中特定字段/属性的自定义更新_at
我目前有一个方法,可以增加订阅服务器上的属性。它的访问属性带有一个整数。我的问题是-我能找到上次更新了访问属性的Ruby on rails rails中特定字段/属性的自定义更新_at,ruby-on-rails,ruby,Ruby On Rails,Ruby,我目前有一个方法,可以增加订阅服务器上的属性。它的访问属性带有一个整数。我的问题是-我能找到上次更新了访问属性的订户吗?在控制台中,它看起来像这样-Subscriber.find(“visit+=1”)。last您总是可以像这样获得最后更新的项目: Subscriber.order('updated_at desc').first 但是,:updated_at将更新,即使更新了除:visit以外的任何内容。因此,您必须编写一个小迁移来添加一个自定义字段,它将为我们完成这项工作 rails g
订户吗?在控制台中,它看起来像这样-Subscriber.find(“visit+=1”)。last
您总是可以像这样获得最后更新的项目:
Subscriber.order('updated_at desc').first
但是,:updated_at
将更新,即使更新了除:visit
以外的任何内容。因此,您必须编写一个小迁移来添加一个自定义字段,它将为我们完成这项工作
rails g migration AddLastVistedToSubscriber last_visited:datetime
运行rakedb:migrate
将:last_visted
添加到我们的表中。现在我们需要在执行+1到:visit
时更新该字段
def visit
@subscriber = Subscriber.find_by(params[:phone_number])
if @subscriber
@subscriber.visit ||= 0
@subscriber.visit += 1
if @subscriber.save
@subscriber.touch(:last_visited) #this will update the last_visited with the update time
flash[:notice] = flash[:notice] = "Thank You #{@subscriber.first_name}. You have #{@subscriber.days_till_expired} until renewal"
redirect_to subscribers_search_path(:subscriber)
end
else
render "search"
end
end
现在我们可以很容易地搜索最后递增的订户的:visit
Subscriber.order('last_visited desc').first
除非您有一个特殊的timestamp字段,该字段仅在调用上述方法时更新,否则您不能。Rails会自动将上次修改的日期存储在表中。因此,您可以对其进行排序并获得第一条记录。find_by
似乎有误,可能您需要执行Subscriber.find_by(电话号码:params[:电话号码])
加油!很高兴我能提供帮助。在5.1+中,您现在可以在保存之前添加一个回调函数,如:do\u something,if::will\u save\u change\u to\u attribute?
Subscriber.order('last_visited desc').first