2015-10-17 1 views
2

Я хотел был бы отправить данные на update action from new действие с помощью кнопки. Поэтому, если пользователь нажимает кнопку отмены;Отправить данные с помощью кнопки с другого действия

<%= 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

Ответ Arup получит 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

Хорошо, спасибо, уточнение. –