2012-09-18 5 views
1

나는 단순한 개념 인 것처럼 보이는 것에 고심하고 있습니다. 단일 항목을 얻을 액티브 쿼리를 사용 후, 해당 항목의 속성에 액세스하고 싶지만 전무에 대한 정의되지 않은 메서드`MSG를 '점점 오전 : NilClassActiveRecord.find로 발견 된 객체의 속성에 액세스하기

다음과 같이 내가 사용 모델은 다음과 같습니다

Provider.lastActive 및 provider.histories.active.recent.first :
class Provider < ActiveRecord::Base 
    attr_accessible :alias, :name 
    validates :name, :presence => true 
    has_many :histories 

    def lastActive 
    return History.where(:provider_id => self.id).last 
    end 
end 

class History < ActiveRecord::Base 
    belongs_to :provider 
    attr_accessible :available, :msg 

    scope :active, where(:available => true) 
    scope :recent, :limit => 1, :order => 'created_at DESC' 

end 

그래서, 나는 주어진 공급자에 대한 가장 최근의 역사 항목에서 얻을 수있는 두 가지 방법이있다. 두 가지 모두 반환되는 History 개체의 특성 중 하나를 얻을 수 없습니다. ERB 방법에 Provider.lastActive를 사용

같이 :

<%= provider.lastActive.msg %> 

수익률 정의되지 않은 메서드`MSG '무기 호에 대한 : NilClass

그러나,

<%= provider.lastActive.inspect %> 

뭔가를 얻을 수 like :

> #<History id: 35, available: true, when: nil, msg: "my message", provider_id: 1, created_at: "2012-09-18 07:12:50", updated_at: 
> "2012-09-18 07:12:50"> 
내가 여기 실종 무엇

provider.histories.active.recent.first & provider.histories.active.recent.first.inspect 

: 같은 역사의 범위를 사용

같은 결과는? Model.find.last를 수행 한 후 왜 cant는 반환 된 모델의 속성에 액세스합니까?

attr_accessible :available, :msg 
그것은 옳지 않아

과 의지 : 당신은 확실히 선을 제거 할

Model.find.last.some_attribute 
+0

된 승인을! 나는 그 문제를 발견했다. 내역이없는 일부 공급자가 있습니다. 그래서, 때로는 무명 obj가 있습니다. 도! 지금은 무 처리를 위해 이것을 사용하고 있습니다 : <% = provider.lastActive.msg provider.lastActive.nil? %> 다른 아이디어 환영합니다 – mmeyer

답변

0

: 난 정말 단 1 개 속성을 원하는 곳이 같은 경우

, 무슨 잘못이 될 것입니다 문제를 일으킨다.

왜 nil에 대해`msg '라는 정의되지 않은 메서드를 제공하는지 이해할 수 없습니다. NilClass 오류가 발생하지만이를 해결하고 수정하는지 확인하십시오.

또한 마지막으로 주문하는 경우 주문 방법이 있어야합니다. 당신이 작업을 일단 당신이 역사 연관이 있기 때문에 다음과 같이

마지막으로, 당신은 lastActive을 정의 할 수 있습니다

def last_active 
    return histories.order(:id).last 
end 
+0

attr_accessible을 제거한 후 고맙지 만 미안한 차이가 없습니다. 내 선호는 History에서 선언 된 범위를 사용하여 가장 최근의 1 개를 얻는 것이 었습니다. 난 def last_active를 대체 정신 테스트로 추가했으나 지금까지는 꽤 혼란 스럽지만 여전히 남아 있습니다. – mmeyer

+0

나는 너무 당황 스럽다. –

관련 문제