고객 (물론 고객 has_many 인보이스)에 속하는 인보이스 모델이 있습니다.ROR 활성 레코드의 열의로드 결과
내가 할 경우
{
@invs = Invoice.find(
:all,
:include => ["customer"],
:conditions => ['somecondition']
)
}
@invs의 클래스는 배열이고 내가 할 경우 내가 배열의 6 송장에 대한 모든 속성을 볼 수 @invs[5]
를. 그러나 그 시점에서 관련 고객 레코드 속성이 표시되지 않습니다. 그것을 얻으려면 @invs[5].customer
해야합니다.
제 질문은 인보이스 레코드에서 고객 레코드에 액세스 할 수있는 Ruby 구조는 무엇입니까? SomeClass의 새로운 임의 레코드를 만들고 해당 레코드 세트의 송장 레코드에 첨부하여 @inv[5].someclass
할 수 있습니다. 그게 가능하니? 만약 그렇다면 어떻게?
[편집 - 전체 기사] 다음은 왜 질문하고 있는지 설명하려고합니다.
내 인보이스 모델이 Db의 단일 테이블과 관련되어 있지만 내 고객 레코드가 보관되어 구조상 고객과 동일한 Archcustomer라는 다른 테이블로 이동할 수 있습니다. 그래서 Invoice belongs_to Archcustomer 및 Archcustomer has_many Invoices와 같은 추가 연결이 있습니다.
고객 기록 (고객 또는 Archcustomer)에 관계없이 관련 고객 기록과 함께 인보이스 목록을 가져와야하지만 Customer.category_id 및 Customer.id 및 Invoice.id로 정렬해야합니다.
@invs 위의 원래 예제에서 나는 고객 레코드를 포함하고 있는데 : order => 'customer.category_id, customer.id, invoice.id'절을 포함 할 수 있지만 고객 레코드는 고객 레코드에 보관됩니다 없다.
그래서 나는 다음을 수행 할 것이라고 생각 :{
@invs.each do |inv|
next if inv.customer != nil
archcust = Archcustomer.find(inv.customer_id) #since it's not in customer get it from Archcustomer
inv.customer.category_id = archcust.category_id
etc...
...
end
}
다음은 inv.sort_by @ 사용합니다. 그러나 그것은 Nil 클래스의 customer.category_id에 값을 할당하려고하기 때문에 불평합니다.
Invoice에 임의의 레코드를 첨부 할 수 있다면 Archcustomer 또는 Customer의 정보를 입력하고 sort_by를 호출하는 공통 속성 집합을 가질 수 있다고 생각했습니다.
물론 내 송장 세트를 주문할 때 다른 방법이 있다면 원하는대로 주문 해 드리겠습니다. 송장 모델에서
지금 정확히 하시겠습니까? '@invs [n] .customer.customer_method'는 LoD를 너무 많이 위반합니까 아니면 다형성 관계를 맺고 있습니까? – jimworm
@jimworm OK 이야기를 읽지 않아도 모든 사람을 구하려고 노력하고 있었지만, 내가하려고하는 것을 이해하기 위해 이야기를하는 것이 필요하다고 생각합니다. 그래서 .... 위의 편집 된 게시물을 참조하십시오. 관심과 성원에 감사드립니다. – nexar