에 제로 발행 수있는 모든 개체를 가져옵니다. 한 대의 자전거는 많은 대여를 할 수 있지만 최대 하나의 "능동적 인"대여가 가능합니다.루비 : 나는 각각 자전거에 자전거와 대여를 나타내는 두 개의 모델을 가지고 레일 2.3.8</p> <p>을 사용하고 특정 협회 및 조건
내가 사용자에게없는 모든 자전거의 목록을 제시 할 새로운 임대를 만들려면 : 나는 (BIKE_RENTAL_RETURNED
및 BIKE_RENTAL_INCIDENT
다른 두 가지 값) 값 BIKE_RENTAL_OUT
으로 bike_rentals 테이블의 상태 필드와 활성 임대 구분 현재 임대 중입니다. 즉 "활성"대여가없는 모든 자전거입니다 (특정 조건과의 연관성이없는 경우).
class Bike < ActiveRecord::Base
has_many :bike_rentals
named_scope :not_rented,
:conditions => "bikes.id NOT IN " +
"(SELECT bike_id FROM bike_rentals " +
"WHERE bike_rentals.status = 'BIKE_RENTAL_OUT')"
end
class BikeRental < ActiveRecord::Base
belongs_to :bike
end
컨트롤러에서 나는 등 그 목록 수 : 아래 그림과 같이
나는 명명 된 범위를 사용하여 솔루션을 함께했다
@bikes = Bike.not_rented.find(:all, :order => 'chasis_number')
작품 위의 코드를,하지만 난 있어요 이 문제에 대한 해결책이나 더 나은 "레일스"솔루션이되어야한다고 생각합니다.
나는 자전거가 가지고있는 "활성"대여의 수에 대해 카운터 캐시를 사용할 수 있음을 알고 있지만, 최대 1 개를 반환하는 모든 "비활성"대여를 선택하는 것은 너무 복잡한 해결책으로 보입니다. 자전거.
아이디어가 있으십니까?
불행하게도이 충분하지 않습니다 수 있습니다, 그래서 그것은 여전히 것 named_scope에서 반환 한 목록에 나타납니다. BIKE_RENTAL_OUT이있는 행이없는 자전거는 같은 자전거가 참여할 때마다 필요합니다. – Miquel
나는 당신의 말을 100 % 확신하지는 못하지만 각 자전거에 대한 가장 최근의 임대 상태를 평가하기를 원한다면 범위에서 하위 선택을 사용해야 할 것입니다. 여기에 이것을 보여주는 질문에 대한 링크가 있습니다. http://stackoverflow.com/questions/4858646/named-scope-to-only-search-first-results-of-joined-table –