Вы хотите включить кэширование счетчика , добавив: counter_cache к принадлежащим_в ассоциации.
class Auction
belongs_to :item
belongs_to :user, :foreign_key => :current_winner_id
has_many :auction_bids
end
class User
has_many :auction_bids
end
class AuctionBid
belongs_to :auction, :counter_cache => true
belongs_to :user, :counter_cache => true
end
Не забудьте добавить столбцы через миграцию. Чтобы создать ставку аукциона и установить пользователя, я бы предложил использовать следующий код:
class MyController
def bid
@ab = current_user.auction_bids.build(params[:auction_bid])
if @ab.save
render :json => {:response => 'YAY!'}
else
render :json => {:response => 'FAIL!'}
end
end
end
Сохраняет шаг и гарантирует, что вы никогда не забудете назначить пользователя.
Последнее требование - найти текущего победителя. На самом деле это ассоциация has_one на аукционе. Вам не нужен столбец для этого:
class Auction
# has_one is essentially has_many with an enforced :limit => 1 added
has_one :winning_bid, :class_name => "AuctionBid", :order => "bid_amount DESC"
end