2010-11-28 9 views
1

は手動のcreated_atの日付を設定しようとすると:私はこれを避けるにはどうすればよいマニュアルセット[Railsの3]

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

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) 

は、次のエラーを取得しますか?この方法ですべてのエントリが入力されるわけではないので、私はcreated_atのデフォルト機能を維持したいと思います。

答えて

3

問題はActiveRecordオブジェクトのcreated_atメソッドではありません。 ここでエラーを吐き出しているのは、tweetオブジェクトで実際にcreated_atメソッドが呼び出されたことです。

上記を参照してください - あなたは(tweetがハッシュである)

entry.text = tweet['text'] 

を使用して...が、その後

entry.created_at = Chromium(tweet.created_at) 

は、ハッシュと呼ばれるメソッドを持っていないと文句を言い created_at

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

問題は、ここにはcreated_atメソッドがありません。 tweetオブジェクトであり、これはハッシュです。あなたは、おそらく初めてオブジェクトが保存されるときしかし、Railsはcreated_at属性をオーバーライドします

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

を意味しました。これはかなり固定された動作で、他の何かを揺さぶらせることなくそれを上書きすることはできません。

たとえば、tweeted_atのように新しいdatetime列を作成し、それを使用することをおすすめします。

+1

ありがとうございます!あなたはどちらも正しかったが、私は最初にマイリスキャリックを見た。ありがとうございました:) –

+0

それを無効にできないというあなたのコメントにちょうど感謝しました。私はさまざまな種類のエントリーを持っていますが、外部ソースからcron/rake経由で取り込まれたものや、日付が追加されたときのレールUIから入力されたものがあります。私はちょうどフィールドを何か他のものと呼んでオートマチックを避けるべきでしょうか?あるいは、ウェブからではなくても使われるimported_atを持っていますか? –

+0

はい、 'created_at'という名前は避けてください。 Railsがやりたいことをやめさせることができたとしても、他の多くのプラグインは 'created_at'フィールドが通常どおりやっていることを期待しているかもしれません。迷惑をかけるよりも安全である方が良い – Gareth