has_many : through 연관을 통해 조인 모델에서 속성을 선택하는 가장 쉽고/가장 우아한 방법이 무엇인지 궁금합니다. , CatalogueItems가 위치 속성이 있다고 말할 수 및 카탈로그와 모든 항목 사이에 하나의 CatalogueItem이 있음을 또한우아하게 has_many에서 속성 선택하기 : Rails에서 모델 조인하기
class Item < ActiveRecord::Base
has_many :catalog_items
has_many :catalogs, :through => :catalog_items
end
:
우리는 다음과 같은 항목 클래스 항목, 카탈로그 및 CatalogItems가 있다고 가정하자 .
위치 속성을 검색하는 가장 확실한하지만 약간 실망 방법은 다음과 같습니다
@item = Item.find(4)
@catalog = @item.catalogs.first
@cat_item = @item.catalog_items.first(:conditions => {:catalog_id => @catalog.id})
position = @cat_item.position
이 짜증나는 우리가 우리가 완전히이 있기 때문에 item.catalogs.first.position @ 할 수 있어야한다는 것 때문에 @ item의 카탈로그 중 첫 번째 위치에 해당하는 위치를 지정합니다.
나는이를 얻기 위해 찾은 유일한 방법은 다음과 같습니다
class Item < ActiveRecord::Base
has_many :catalog_items
has_many :catalogs, :through => :catalog_items, :select => "catalogue_items.position, catalogs.*"
end
지금 내가 Item.catalogs.first.position 할 수 있습니다. 그러나 이것은 약간의 해킹처럼 보입니다. 카탈로그 인스턴스에 추가 속성을 추가하고 있습니다. 또한 @ catalog 로그에 Catalog.find 또는 @ item.catalogs를 채우는 두 가지 상황에서보기를 사용하려는 가능성을 열어줍니다. 하나의 경우, 그 위치는 그곳에 있고 다른 위치는 그렇지 않을 것입니다.
아무에게도 좋은 해결책이 있습니까?
감사합니다.
인스턴스 메서드는 작동하지만 더 나은 방법이 있어야하는 것처럼 보입니다. 특별히 첫 카탈로그를 원했던 것은 아니며 단지 예제로 사용했습니다. 나는 당신이 @ item.position_in_catalog (catalog_id)를 할 수 있다고 생각한다. – arjun
예, @ otem.position_in_catalog (카탈로그)에 대해 다시 작성하는 것은 정말 쉽습니다. 그러나, 나는 당신이 원하는 것을 구현할 수있는 다른 방법을 보지 못합니다. –
@ item.catalogs.first.position <- 이것은 어떤 위치도 전혀 지정하지 않습니다. @ item.catalogs를 사용하면 모든 카탈로그의 하위 집합을 지정하고 첫 번째 카탈로그를 선택할 수 있습니다.결국, 당신이 얻는 방법에 대해 불가지론적인 카탈로그 일뿐입니다. –