2012-04-02 52 views
2

我有一個rails 3.2項目。 有投標對象,我希望用戶能夠接受此出價! 我該怎麼做? 我的第一個想法是要對投標控制器做一個新的方法,並且在方法中我必須更新bid的接受布爾值。類似的東西?接受自定義控制器動作的出價

def accept 
    @bid = Bid.find(params[:id]) 
    @bid.subject ='accept!!!!' 
    flash[:notice] = "Successfully destroyed post." 
    respond_to do |format| 
     format.html { redirect_to "/mybids" } 
     format.json { head :no_content } 
    end 
    end 

回答

2

你的問題有點模糊,因爲目前還不清楚什麼bid連接,或者什麼其他模型在您的應用程序,因爲你不說。

但是,假設這是一個拍賣網站,並且拍賣有出價。如果出價被接受

  • 上拍賣的所有其他投標被破壞
  • 這是公認的有它的accepted布爾字段設置爲true投標。

如果這與您正在嘗試做的接近,那麼下面的代碼應該完成該操作。

app/controllers/bids_controller.rb

# PUT /bids/:id/accept 
def BidsController < ApplicationController 
    def accept 
    @bid = Bid.find(params[:id]) 
    @bid.update_attribute(:accepted, true) 
    @bid.auction.bids.each do |rejected_bid| 
     rejected_bid.destroy unless rejected_bid == @bid # destroys all be the accepted bid 
    end 

    flash[:notice] = "Bid accepted." 
    respond_to do |format| 
     format.html { redirect_to "/mybids" } 
     format.json { head :no_content } 
    end 
    end 
end 

然後你需要爲這個動作添加路由到您的config/routes.rb文件。喜歡的東西...

resources :bids do 
    put :accept, :on => :member 
end 

表視圖,你會鏈接到這條路線是這樣的:

link_to "accept", accept_bid_path(@bid) 

如果你從你的命令行調用rake routes,你應該看到類似的條目這個:

accept_bid PUT /bids/:id/accept(.format) {:action=>"accept", :controller=>"bids} 
+0

是的,這就是我想要做的!我怎樣才能從視圖中調用它? – 2012-04-02 13:46:21

+0

您必須爲自定義操作添加路由。然後,它可以作爲幫助程序使用,並且可以是'accept_bid_path(:id)',其中':id'是您接受的「Bid」對象的** id **。 – jefflunt 2012-04-02 13:57:57

+0

我還將路由定義添加到答案中。應該是你需要的所有信息。欲瞭解更多信息,你會想看到這個路由指南:http://guides.rubyonrails.org/routing.html – jefflunt 2012-04-02 14:00:53

相關問題