2010-11-22 6 views
0

레일에서 문제가 발생합니다. 두 모델 (주문 및 상태) 간의 기본 관계는 많은 관계가 있습니다. 이 모델은 다음과 같이 :"새 인스턴스를 만들 때 이름이 nil : NilClass"에 정의되지 않았습니다.

class Order < ActiveRecord::Base 
    has_many :products, :through => :lines 
    has_and_belongs_to_many :statuses 

    default_scope order("#{table_name}.created_at desc") 
end 

및 주문 내 인덱스 뷰 내에서

class Status < ActiveRecord::Base 
    has_and_belongs_to_many :orders 

end 

, 나는 그러나, 주문의 가장 최근 상태, 그래서 order.statuses.last.name을 표시하고있어, 새 주문을 만들 때 오류가 발생합니다. 이 오류는 정의되지 않은 메소드 이름에 대한 것입니다. 새 주문은 처음 만들 때 관계가 없습니다.

제 질문은 새 주문을 저장하기 전에 제 두 모델 간의 관계를 초기화하는 방법이 있습니까? 내 주문이 항상 내 상태 수집의 첫 번째 상태를 유지하고 싶지만 저장하기 전에 수작업으로 확인해야 할 필요는 없습니다. 좋은 조치

오류 : 내 생각에이 라인에 대한

undefined method `name' for nil:NilClass 

: 모든

<td><%= order.statuses.last.name %></td> 

감사합니다.

+0

음,'statuses'를 초기화하기 위해 당신은 그것을 하드 코딩하거나 데이터베이스를 공격해야합니다. 그렇다면 단순히 저장하고 다음 단계로 이동하지 않는 이유는 무엇입니까? 상태 배열을 캐시에 저장하지 않고 순서대로 초기화하지 않는 한. 감사 표시. – Jeremy

답변

0

<td><%= order.statuses.last.try(:name) %></td> 
1

간단한 수정 :이 더 지난 상태입니다 또는 마지막 상태 이름이없는 경우는주의를 기울여야한다

<td><%= order.statuses.last.name if order.statuses %></td> 
+0

. 이 문제를 해결하기 위해, 나의 특정 상황이 혼합 결과를 가져 왔기 때문입니다. 다음을 성공적으로 수행 할 수 있습니다. <% = order.statuses.last if order.statuses %> - 할 수 없습니다. <% = order.statuses.last.name if order.statuses %>. 내 생각 엔 .name 메소드가 내 상태 모델에서 나오기 때문이며, 이것이 nil 일 경우 응답하는 방법을 아직 모르고 있기 때문일까? 이 .name 메서드를 저장하기 전에 관계를 초기화해야한다고 생각합니까? 다시 한번 정말로 감사드립니다. – Kombo

+0

상태가 이름없이 존재할 수 있습니까? 이 경우, 조건에 포함 시키길 원할 것입니다 :'order.statuses.last.name if order.statuses.last.name' –

관련 문제