Ruby on rails 使用自定义控制器操作接受投标

Ruby on rails 使用自定义控制器操作接受投标,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我有一个rails 3.2项目。 有一个出价对象,我希望用户能够接受这个出价! 我该怎么做? 我的第一个想法是在bids控制器上创建一个新方法,在这个方法中,我必须更新bid的accept布尔值。类似的东西 def accept @bid = Bid.find(params[:id]) @bid.subject ='accept!!!!' flash[:notice] = "Successfully destroyed post." respond_to do

我有一个rails 3.2项目。 有一个出价对象,我希望用户能够接受这个出价! 我该怎么做? 我的第一个想法是在bids控制器上创建一个新方法,在这个方法中,我必须更新bid的accept布尔值。类似的东西

  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

你的问题有点含糊,因为你不清楚什么是
出价
,或者你的应用程序中有什么其他型号,因为你没有说

然而,假设这是一个拍卖网站,拍卖有出价。当投标被接受时

  • 拍卖会上的所有其他出价都将被销毁
  • 已接受的投标将其
    已接受
    布尔字段设置为
如果这与您正在尝试做的很接近,那么下面的代码应该可以实现这一点

app/controllers/bids\u 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
从视图中,您将链接到此路线,如下所示:

link_to "accept", accept_bid_path(@bid)
accept_bid PUT   /bids/:id/accept(.format)    {:action=>"accept", :controller=>"bids}
如果从命令行调用
rake routes
,您应该会看到如下条目:

link_to "accept", accept_bid_path(@bid)
accept_bid PUT   /bids/:id/accept(.format)    {:action=>"accept", :controller=>"bids}

对这就是我想做的!我如何从视图中调用它?您必须为自定义操作添加一个路由。然后它可以作为一个助手使用,它将是
accept\u bid\u path(:id)
,其中
:id
是您正在接受的
bid
对象的id。我还将路由定义添加到了答案中。应该是你需要的所有信息。有关详细信息,请参阅本路由指南: