3
나는 사용자 정의 파인더 아래 정의 :명명 된 범위를 호출하는 사용자 지정 ActiveRecord 찾기?
named_scope :eager, :include => [{:container_inventory => {:container => [:size_type, :grade]}}, :company, :truck, :hauler]
이
협회는 설치가 경유 :
class ContainerGateIn << ActiveRecord::Base
...
def self.search(text)
result = if text
text.split(' ').inject(self) do |result, criteria|
case criteria
when /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/
result.search_by_date(criteria.to_date)
else
result.search_by_text(criteria)
end
end
else
self
end
end
...
end
search_by_date 및 search_by_text이 범위를 명명 된
, 열망은 범위라는 열망 로딩과 같이 정의입니다 HMT (has_many : 통해)
파인더가 ContainerDepot에서 중첩 관계를 통해 호출 될 경우 문제가class ContainerDepot << ActiveRecord::Base
has_many :container_inventories
has_many :container_gate_ins, :through => :container_inventories do
end
때문에 실패 ActiveRecord :: Statement :: Invalid를 사용하여 테이블이 두 번 이상 지정되었음을 나타냅니다.
ContainerDepot.first.container_gate_ins.eager.search(text)
=> ActiveRecord::StatementInvalid: PGError: ERROR: table name "container_inventories" specified more than once
내가 연관 확장으로 전체 사용자 정의 찾기 복사하여이를 정정 할 수 :
class ContainerDepot << ActiveRecord::Base
...
has_many :container_gate_ins, :through => :container_inventories do
def search(text)
... custom finder code from ContainerGateIn ...
end
end
...
end
그것은 비록 매우 건조하지 않습니다 및 사용자 정의 파인더로, 매우 불필요하고 잠재적으로 문제 중복을 소개 것 추가 검색 논리를 수용하기 위해 수시로 변경해야합니다.
더 나은 방법에 대한 아이디어가 있으십니까?