2010-03-02 8 views
0

저는 Ruby를 처음 사용합니다. 나에게 오류를주는 다음 코드 조각이있다.Ruby 스크립트의 디버그 오류

전무 : updated_at, 무기 호 : 전무, 신체 : 전무, created_at ItemsController 번호에 NoMethodError은 LBS2 ID에 대한 ' 정의되지 않은 메서드`위도 = 채울 내가 URL을 쳤을 때

class ItemsController < ApplicationController 
    def populate 
    Location.all.each { |l| 
     place = l.radar_place 
     next if !place 
     news_items = place.radars 
     news_items.each { |ni| 
     t = Lbs2.new 
     t.lat = l.lat 
     t.lng = l.lng 
     t.body = ni.body 
     t.save if !Lbs2.find_by_body(ni.body) #avoiding redundant news_items 
     } 
    } 
    render :text => "Success" 
    end 
end 

오류가 표시되는 것입니다

이 코드는 "if! Lbs2.find_by_body (ni.body)"문 없이도 완벽하게 작동합니다. 내가 이것을 포함 시켰을 때, 중복되는 news_items를 피하기 위해 위에서 언급 한 오류가 발생했다. 누군가 LBS2에 채워지는 중복 news_items를 피하면서이 오류를 제거하는 방법을 알려주실 수 있습니까? 미리 감사드립니다

+0

그것은 일을 일부러. Lbs2는 lat, lng 및 body를 저장하기 위해 만들어진 모델입니다. 다른 변경 사항을 제안해야합니까? – mamatha

+0

Lbs2에는 "lat"열이 있다고 가정합니까? – Shadowfirebird

+0

이 질문에 "rails"라고 덧붙일 수도 있습니다. – Shadowfirebird

답변

0

중복 항목을 피하려면 validate() 메서드를 덮어 쓸 수 있다고 생각합니다. 다음과 같은 내용이 있습니다.

def validate 
    conditions = {"lat" => self.lat, "lng" => self.lng} 
    if Lbs2.first(:conditions => conditions) 
     errors.add_to_base "Your error message" 
    end 
end 
+0

감사합니다. Jeff T. 당신이 옳았습니다. lat 및 lng 필드는 저장되지 않았습니다. 문제는 데이터 유형 "double"이 루비에서 지원되지 않는다는 것입니다. 데이터 유형 "float"은 (는) 사용되어야합니다. 나는 Lbs2를 떨어 뜨 렸고 루비 스크립트를 만들었고 모델을 생성했다. Lbs lat : float lng : float body : text. 이 모든 일이 끝난 후에도 완벽하게 작동했습니다. – mamatha

0

좋아, 여기에 몇 가지가 있습니다. 오류 메시지는 Lbs2 객체의 "lat"속성에 무언가를 저장하는 방법을 알지 못한다고 말합니다. Lbs2에 대해 "위도 (lat)"필드를 원한다는 것을 스크립트/생성기에 알 렸지만 결국 저장되지 않은 것처럼 보입니다. db/schema.rb를 확인하십시오. 하지만 첫 번째 단계는 해당 필드를 데이터베이스의 해당 테이블에 추가하는 것입니다. 자세한 내용은 Rails Migrations Guide을 읽어보십시오.

또한 필드의 고유성을 확인하는 훨씬 더 좋은 방법이 있습니다. app/models/lbs2.rb에서 말한다 (어떤 방법 이외의) 줄을 추가합니다 (LBS2 객체가 정의되어 가정) :

validates_uniqueness_of :body 

이 더 많은 정보를 위해 Rails Validations Guide을 읽어보십시오. 나는 t으로 LBS2을 교체 할 때이 도움이

희망,
-Jeff T.

+0

미안하지만 내가 틀렸다면 [나는 @mamatha와 같은 초보자이다.]하지만 내가 한 것은 validates_uniqueness_of와는 다른 것이라고 생각한다. "lat"와 "lng"이 같은 항목을 하나만 갖고 싶지만 같은 "lat"와 다른 "lng"항목이 많은데 신경 쓰지 않으면 validates_uniqueness_of가이 작업을 수행합니까? [영어에 대해서도 너무] –

+1

안녕하세요. 그렇습니다. 'lat'와 'lng'의 조합의 고유성을 확인하고 있습니다. 실제로는 다릅니다. 'validates_uniqueness_of'를 사용하여 그렇게 할 수 있다고 생각지 않습니다. @mamatha는 수동으로'body' 필드의 유일성을 단독으로 검증하고 있으며, 더 나은 방법을 보여주었습니다. –

+0

tks, jeff. 왜 나는 그가 하나 이상의 attibute = P 어쨌든, 유효성 검사를하고 싶다고 생각하는지 모르겠다. –