【问题标题】:Accepting bids with custom controller action使用自定义控制器操作接受出价
【发布时间】:2012-04-02 13:22:19
【问题描述】:

我有一个 rails 3.2 项目。 有一个投标对象,我希望用户能够接受这个投标! 我怎样才能做到这一点? 我的第一个想法是要在投标控制器上创建一个新方法,并且在该方法中我必须更新投标的接受布尔值。类似的东西?

  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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2


    【解决方案1】:

    你的问题有点含糊,因为不清楚 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}
    

    【讨论】:

    • 是的!这就是我想做的!我怎么能从视图中调用它??
    • 您必须为自定义操作添加路由。然后它将作为帮助程序提供,并且将是 accept_bid_path(:id) 其中 :id 是您正在接受的 Bid 对象的 id
    • 我也将路由定义添加到答案中。应该是您需要的所有信息。有关更多信息,您需要查看此路由指南:guides.rubyonrails.org/routing.html
    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多