我有以下模型(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
。我做错了什么?
答案 0 :(得分:2)
除非我忽略了你在这里所做的事情,否则如果你想在创建行时保存它,你可能正在寻找before_create
。否则,您必须向方法添加self.save
,但这会导致额外的数据库调用,因此before_create
可能是更好的选择。
(基本上,您之前所做的流程是创建模型,保存到数据库,然后对象将其属性sort_timestamp
修改为created_at
;这是在数据库提交之后,并且只在内存中执行(因此不会持久化,除非您在代码中稍后以其他方式将其持久化)。
编辑:实际上,这可能不会起作用,因为在创建记录之前可能不会设置created_at。一些选择:
1)使用self.save
将after_create
添加到方法的结尾
2)如果时间Time.now
和sort_timestamp
不必完全相同,请使用created_at
。
或者,3)尝试向迁移添加默认值:How to use created_at value as default in Rails