2015-10-17 46 views
2

我想用new動作按鈕發送數據到update動作。 所以如果用戶點擊取消按鈕;用另一個動作按鈕發送數據

<%= button_to "Cancel", {:controller => :requests, 
     :action => 'update', :user_id =>received.user.id, :id => received.id }, :value => "Cancelled" %> 


The value has to be sent to the `update` action. But instead I receive an error; 

Started POST "/user/295/requests/29" for ::1 at 2015-10-17 12:35:30 +0300 

ActionController::RoutingError (No route matches [POST] "/boats/295/requests/29"): 

和請求控制器;

def update 
    @request = Request.find(params[:id]) 
    puts situation = params[:situation] 
    if @request.update_attributes(situation) 
     flash[:success] = "Approved" 
     redirect_to new_user_request(current_user.id) 
    else 
     redirect_to new_user_request(current_user.id) 
    end 

基本上,想發送文本數據來更新請求控制器中的動作。

回答

1

奧雅納的答案將得到button_to爲你工作。

給你一些代碼,你將需要:

<%= button_to "Cancelled", requests_path(received.id, received.user.id), method: :put %> 

在關於代碼本身,你會更好,這樣做:

<%= button_to "Cancelled", requests_path(received.id, received.user.id), method: :put, {params: {situation: "Cancelled"}} %> 

#app/controllers/situations_controller.rb 
class SituationsController < ApplicationController 
    def update 
     @situation = Situation.find params[:id] 
     @situation.update situation_params 
    end 

    private 

    def situation_params 
     params.require(:situation).permit(:situation) 
    end 
end 

這將允許你更新@situation有一個「取消」的「情況」。

我推薦了一些修復:

  1. 您應該重命名「風雲」欄目,以status(這樣你就可以調用@situation.status

  2. 你應該讓你的status列更少地依賴於文字 - 它應該有一個嚴格的規範,也許使它boolean什麼的,這將允許你打電話像@situation.active?

  3. 您應該隨時使用Rails path helpers。發送一個控制器/動作信息的散列是好的,但最好使用內置的路徑更好的約定

+1

好的,謝謝澄清。 –

相關問題