레거시 MySQL 데이터베이스에서 데이터를보기 위해 매우 간단한 레일 3 애플리케이션을 설정하고 있습니다. 레거시 데이터베이스는 대부분 외래 키 필드가 복수형 인 것을 제외하고는 ORM 호환 레일입니다. 예를 들어, 내 "주문"테이블에는 "회사"테이블 ("company_id"가 아닌) "회사 _ 테이블"에 대한 외래 키 필드가 있습니다. 그래서 자연스럽게 "belongs_to"의 ": foreign_key"속성을 사용하여 수동으로 필드 이름을 설정해야합니다.정의되지 않은 메소드`code for nil : 레일과 레거시 데이터베이스가있는 NilClass 메시지
나는 몇 년에 레일을 사용하지 않은,하지만 난 모든 것을 제대로하고있어 확실 해요, 아직 내가 "order.currency.code"에 접근을 시도하는 다음과 같은 오류 얻을 :
undefined method `code' for nil:NilClass
을
이것은 매우 간단한 응용 프로그램입니다. 내가 한 모든 일은 레거시 데이터베이스 테이블 각각에 대한 응용 프로그램과 일련의 스캐 폴드를 생성하는 것입니다. 그런 다음 위에서 언급 한 데이터베이스 명명 규칙의 차이를 조정할 수 있도록 일부 모델을 검토하고 일부 필드를보기에 추가했습니다. 그게 전부 야. 재미있는 사업이 아닙니다.
그래서 내 데이터베이스 테이블은 다음과 같이 (단지 관련 필드를) 볼 :
orders
------
id
description
invoice_number
currencies_id
currencies
----------
id
code
description
내 주문 모델은 다음과 같습니다
내 환율 모델은 다음과 같습니다class Order < ActiveRecord::Base
belongs_to :currency, :foreign_key=>'currencies_id'
end
:
class Currency < ActiveRecord::Base
has_many :orders
end
관련보기 스 니펫은 다음과 같습니다.
<% @orders.each do |order| %>
<tr>
<td><%= order.description %></td>
<td><%= order.invoice_number %></td>
<td><%= order.currency.code %></td>
</tr>
<% end %>
나는 완전히 아이디어가 없습니다. 어떤 제안?
아, 이제 다 나에게 돌아오고 있습니다. 나는 처음 몇 년 동안 레일을 사용하기 시작했을 때 이러한 null 문제로 어려움을 겪었던 것을 기억합니다. 고맙습니다. 그랬어. –
당신의 굴절은 그 외래 키에 대한 필요성을 부적절하게 만들지 않을까요? 또한 order.currency.blank를 사용하고 싶습니까? 또는 역순으로 order.currency.present? 그냥 두 개 이상의 속성을 포착하게하고 그 위에는 아무 것도 붙이지 않게됩니다. – pjammer