手动设置created_at属性[Rails 3]

时间:2010-11-28 22:09:21

标签: ruby-on-rails ruby-on-rails-3

尝试手动设置created_at日期:

entry = Entry.new
entry.text = tweet['text']
entry.source = 'tweet'
entry.user_id = user.id
entry.latitude = coords[1]
entry.longitude = coords[0]
entry.created_at = Chromium(tweet.created_at)

收到以下错误:

 undefined method `created_at' for #<Hash:0x1036af910>

我该如何避免这种情况?我想保留created_at的默认功能,因为并非所有条目都以这种方式输入。

2 个答案:

答案 0 :(得分:3)

您的问题不在于ActiveRecord对象的created_at方法。 我认为这里出现错误的是实际上created_at对象上调用的tweet方法。

见上文 - 你使用

entry.text = tweet['text']

tweet是哈希)...但是

entry.created_at = Chromium(tweet.created_at)

抱怨Hash没有名为created_at

的方法
 undefined method `created_at' for #<Hash:0x1036af910>

答案 1 :(得分:3)

这里的问题是created_at对象上没有tweet方法,这是一个哈希。你可能意味着

entry.created_at = Chromium(tweet['created_at'])

但是,当第一次保存对象时,Rails将覆盖created_at属性。这是一个非常固定的行为,你将无法覆盖它而不会弄乱其他东西。

最好创建一个新的日期时间列,例如tweeted_at并使用它。