在模型实例创建期间自动将列设置为created_at

时间:2012-08-07 17:16:58

标签: ruby-on-rails ruby activerecord callback

我有以下模型(sort_timestamp是日期时间):

class Post < ActiveRecord::Base
  [snip attr_accessible]
  acts_as_nested_set
  after_create :set_sort_timestamp

  private
  def set_sort_timestamp
    self.sort_timestamp = self.created_at
  end
end

我正在使用https://github.com/collectiveidea/awesome_nested_set。此代码未设置sort_timestamp。我做错了什么?

1 个答案:

答案 0 :(得分:2)

除非我忽略了你在这里所做的事情,否则如果你想在创建行时保存它,你可能正在寻找before_create。否则,您必须向方法添加self.save,但这会导致额外的数据库调用,因此before_create可能是更好的选择。

(基本上,您之前所做的流程是创建模型,保存到数据库,然后对象将其属性sort_timestamp修改为created_at;这是在数据库提交之后,并且只在内存中执行(因此不会持久化,除非您在代码中稍后以其他方式将其持久化)。

编辑:实际上,这可能不会起作用,因为在创建记录之前可能不会设置created_at。一些选择:

1)使用self.saveafter_create添加到方法的结尾 2)如果时间Time.nowsort_timestamp不必完全相同,请使用created_at。 或者,3)尝试向迁移添加默认值:How to use created_at value as default in Rails