使用自定义控制器操作接受出价

时间:2012-04-02 13:22:19

标签: ruby-on-rails ruby-on-rails-3.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

1 个答案:

答案 0 :(得分: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}