API для именованных областей - PullRequest
2 голосов
/ 27 декабря 2008

У меня большие трудности с чтением API для именованных областей. Каждая «ставка» имеет user_id и auction_id. Мне нужна возможность вернуть аукционы, на которые пользователь сделал ставку.

Аукцион

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

1 Ответ

2 голосов
/ 27 декабря 2008

Возможно, вы захотите попробовать иметь множество через ассоциацию вместо именованной области.

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? (Пользователь)

Наконец, вы можете передать более одного параметра в лямду, так что (не лучший пример)

named_scope :for_apple_and_banana, lambda{|apple_id, banana_id| {:conditions => ["apple_id = ? AND banana_id = ?", apple_id, banana_id ]}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...