零個OCCURENCES所有實體,我使用Rails 2.3.8Ruby on Rails的:獲取對一個特定關聯和條件
我有兩個型號,它們分別代表了自行車和自行車出租。一輛自行車可以有很多租賃,但最多隻有一次「活躍」租賃。我區分了狀態字段中bike_rentals表中的有效租值爲BIKE_RENTAL_OUT
(與其他兩個可能的值:BIKE_RENTAL_RETURNED
和BIKE_RENTAL_INCIDENT
)
要創建一個新的租金,我要提供給用戶的是不是所有的自行車上的列表目前租用的,那就是所有沒有「活躍」租賃的自行車(與特定條件有關的零次出現)。
我使用了一個名爲範圍的解決方案提出瞭如下圖所示:
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自行車。
任何想法?
不幸的是,這是不夠的,因爲自行車可以在同一時間BIKE_RENTAL_OUT與BIKE_RENTAL_RETURNED即加盟,所以它會仍然出現在您的named_scope返回的列表中。我需要與BIKE_RENTAL_OUT沒有任何聯繫的自行車,無論同一輛自行車在聯接中有沒有其他條目。 – Miquel 2011-02-15 09:24:11