2008-12-26 73 views
2

我很難讀取命名作用域的API。每個「出價」都有一個user_id和一個auction_id。我需要一個範圍來返回用戶已經出價的拍賣。命名作用域的API

拍賣

class Auction < ActiveRecord::Base 

    has_many :bids 

    named_scope :current, lambda { 
    {:conditions => ["scheduled_start < ?", 0.minutes.ago], 
         :order => 'scheduled_start asc'} 
    } 

    named_scope :scheduled, lambda { 
    {:conditions => ["scheduled_start > ?", 0.minutes.ago], 
         :order => 'scheduled_start asc'} 
    } 

end 

投標

class Bid < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :auction 

    validates_numericality_of :point, :on => :create 

# 
# how do I write a named scope to check if a user has bid on an auction? 

end 

回答

2

你可能會想嘗試一個具有通過關聯的,而不是一個命名範圍多。

class User < ActiveRecord::Base 
    has_many :bids 
    has_many :auctions, :through => :bids 
end 

或做它的其他方式輪

class Auction < ActiveRecord::Base 
    has_many :bids 
    has_many :users, :through => :bids 
end 

這樣的話,你可以簡單的寫:@ auction.users.include(用戶)

不是很清楚閱讀? ,所以讓我們改進:

class Auction < ActiveRecord::Base 
    has_many :bids 
    has_many :bidders, :through => :bids, :source => :user 
end 

現在?:@ auction.bidders.include(用戶)

最後,您可以通過一個以上的參數去一個LAMDA,所以(不是最好的例子)

named_scope :for_apple_and_banana, lambda{|apple_id, banana_id| {:conditions => ["apple_id = ? AND banana_id = ?", apple_id, banana_id ]}}