为rails中的特定字段/属性自定义updated_at

时间:2016-06-20 18:04:45

标签: ruby-on-rails ruby

我目前有一个方法可以增加Subscriber上的属性。它的访问属性包含int。我的问题是 - 我能否找到最后更新其访问属性的Subscriber?在控制台中它看起来像这样 - Subscriber.find("visit +=1").last< - 完全错误的BTW,但我认为它看起来有点像那样?有人知道如何在控制台中调用它吗?任何帮助都会很棒。

控制器方法:

def visit
  @subscriber = Subscriber.find_by(params[:phone_number])
  if @subscriber
    @subscriber.visit ||= 0
    @subscriber.visit += 1
    @subscriber.save
    flash[:notice] = flash[:notice] = "Thank You #{@subscriber.first_name}. You have #{@subscriber.days_till_expired} until renewal"
    redirect_to subscribers_search_path(:subscriber)
  else
    render "search"
  end
end 

如您所见,我想调用上次使用此方法的订阅者更新其对象的visit属性。如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

您可以随时获取上次更新的项目:

Subscriber.order('updated_at desc').first

但即使:updated_at以外的任何内容更新,:visit也会更新。因此,您必须编写一些迁移来添加自定义字段,以便为我们完成工作。

rails g migration AddLastVistedToSubscriber last_visited:datetime

运行rake db:migrate:last_visited添加到我们的表格中。现在,只要我们对:visit执行+1,就需要更新该字段。

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

现在,我们可以轻松搜索subscriber :visit最后增加的内容。

Subscriber.order('last_visited desc').first