2017-02-15 11 views
0

동의 및 거부라고하는 두 개의 링크 (필요한 경우 버튼 일 수 있음)가 있으며 해당 링크 중 하나를 클릭하여 컨트롤러 조치에 true 또는 false 매개 변수를 보내야합니다. 매개 변수를 URL에 표시하지 않으므로 put 메서드를 사용해야합니다. 나는 정의 된 방법으로 link_to를 시도했다 :입력란에 버튼을 통한 매개 변수 보내기

<%= link_to 'accept', { action: 'accept_offer', accept: true }, method: :put %> 
<%= link_to 'decline', { action: 'accept_offer', accept: false }, method: :put %> 

그러나 내 매개 변수는 여전히 보인다.

button_to를 사용해 보았지만 매개 변수가 전달되지 않았습니다. URL에 매개 변수를 표시하지 않고 어떤 옵션을 선택했는지 (수락 또는 거절) 결정하는 가장 좋은 방법은 무엇입니까?

내 경로는 다음과 같이 정의 할 수있다 : 바로 기존의 경로와

put 'offers', to: 'offers#accept_offer' 

답변

1

link_to 대신 양식을 만들고 이름에 params를 전달하는 것이 좋습니다. 양식을 사용하고 정보를 게시하십시오. 소스 페이지에 추가 코드가 필요할 수 있지만 대상 페이지에서 논리 변경이 필요하지 않아야합니다.

<% form_for @offer, :url => {:action => 'accept_offer'} do |f|%> 
    <%= submit_tag "", :value => "Accept":name => "accept" %> 
    <%= submit_tag "", :value => "Decline":name => "decline" %> 
<% end %> 

조치로 클릭하면 링크를 기반으로 [: accept] 또는 params [: decline] 매개 변수가 표시됩니다.

+0

작업 흐름을 결정하기 위해 컨트롤러 작업에 매개 변수를 전달해야하므로 form_tag 내에서 내 action 및 put 메서드로 submit_tag와 함께 제안을 사용했습니다. 감사 – mara

-1

시작 :

<%= button_to 'accept', @offer, method: :patch, params: { "offer[accept]" => true } %> 
<%= button_to 'decline', @offer, method: :patch, params: { "offer[accept]" => false } %> 

:

resources :offers 

그리고 이산 양식을 만들 수있는 사용 button_to을 할 수 있습니다 params 옵션은 양식 내에 숨겨진 입력을 만듭니다. 그런 다음

올바른 속성 화이트리스트 확인 :

resources :offers do 
    member do 
    patch :accept 
    patch :decline 
    end 
end 

<%= button_to 'accept', accept_offer_path(@offer), method: :patch %> 
<%= button_to 'decline', decline_offer_path(@offer), method: :patch %> 

: 당신이 두 개의 추가 동사를 만들 정규 업데이 트에서 별도의 논리를 가지고해야하는 경우

class OffersController < ApplicationController 
    def update 
    @offer = Offer.find(params[:id]) 

    if @offer.update(offer_params) 
     redirect_to @offer, success: 'Offer updated' 
    else 
     render :new 
    end 
    end 

    def offer_params 
    params.require(:offer).permit(:accept, :foo, :bar) 
    end 
end 

을 이렇게하면 API가 편안하고 암호 해독됩니다.