2010-11-28 5 views
1

수동으로 created_at 날짜를 설정하려고 :수동 설정 created_at 속성 [레일 3]

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의 기본 기능을 유지하고 싶습니다.

답변

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 개체는 해시입니다. 당신은 아마 개체가 처음 저장할 때 그러나, 레일은 created_at 속성을 무시합니다

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

을 의미했다. 이것은 꽤 고정 된 행동이며 다른 것을 엉망으로 만들지 않고는 무시할 수 없습니다.

예를 들어 tweeted_at과 같이 새로운 datetime 열을 만든 다음이를 사용하는 것이 좋습니다.

+1

고마워요! 너는 둘다 맞았지만 mylescarricks가 처음 보였다. 고마워요 :) –

+0

그냥 무시할 수 없다는 것에 대한 당신의 의견에 주목했습니다. 나는 여러 가지 다른 타입의 엔트리를 가지고 있는데, 어떤 것들은 cron/rake를 통해 외부 소스로부터 끌어 왔고 어떤 것들은 추가 된 날짜로 할 수있는 레일 UI를 통해 입력되었습니다. 방금 다른 필드를 호출하여 자동 매칭을 피하거나 웹에서 가져온 것이 아닌 경우 가져온 항목을 가져야합니까? –

+0

예,'created_at'라는 이름을 피하는 것이 좋습니다. Rails가 원하는 것을 멈추게 할 수 있다고해도, 많은 플러그인들은'created_at' 필드가 보통하는 일을 할 것으로 기대합니다. 짜증나는 것보다 안전 할 것 – Gareth

관련 문제