0

我有以下模型(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。我究竟做错了什么?

4

1 回答 1

2

除非我错过了您在这里所做的事情的重点,否则您可能正在寻找before_create是否希望在创建行时保存它。否则,您必须添加self.save到该方法中,但这会导致额外的数据库调用,因此before_create可能是更好的选择。

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

编辑:实际上,这可能行不通,因为 created_at 可能不会在创建记录之前设置。几个选项:

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

于 2012-08-07T17:41:36.170 回答