2008-12-26 6 views
2

J'ai beaucoup de difficulté à lire l'API pour les étendues nommées. Chaque "enchère" a un user_id et un auction_id. J'ai besoin d'une portée pour renvoyer les enchères sur lesquelles l'utilisateur a fait une offre.API pour les étendues nommées

Auction

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 

offre

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 

Répondre

2

vous pourriez vouloir essayer un a beaucoup à travers l'association au lieu d'un champ nommé.

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

Ou le faire dans l'autre sens

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

De cette façon, vous pouvez simplement écrire: @ auction.users.include (utilisateur)

Ce n'est pas très clair pour lire? , laisse ainsi l'améliorer:

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

Et maintenant: @ auction.bidders.include (utilisateur)

Enfin, vous pouvez passer plus d'un à un lamda param, donc (pas le meilleur exemple)

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