2012-04-02 16 views
2

私はレール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 

答えて

2

あなただ質問は少しあいまいです、あなたは言っていないので、それははっきりしていないので何bidに取り付けられた、または他のモデルは、あなたのアプリケーションであるかをされています。

しかし、これはオークションサイトであり、オークションには入札があるとします。入札が

  • を受け付けた場合、そのオークション上の他のすべての入札が破壊され受理されました
  • 入札は、それがtrueに設定acceptedブール型フィールドのしています。

これが実行しようとしていることに近い場合は、以下のコードを実行する必要があります。 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

はい!これは私がしたいことです!そして、私はどのようにビューから呼び出すことができますか? –

+0

カスタムアクションのルートを追加する必要があります。それはヘルパーとして利用可能で、 'accept_bid_path(:id)'となります。ここで、 ':id'はあなたが受け入れる' Bid'オブジェクトの** id **です。 – jefflunt

+0

回答にルート定義を追加しました。あなたが必要とするすべての情報でなければなりません。詳細については、このルーティングガイドを参照してください:http://guides.rubyonrails.org/routing.html – jefflunt

関連する問題