0
ActionController::ParameterMissing in DuelersController#update 
param is missing or the value is empty: dueler 

어떻게 사용자가 클릭 할 때 "동의"또는 "거절"그래서이 :acceptparam이 (가) 없거나 값이 비어 있습니까?

Dueler.last 
id: 20, 
user_id: 78, 
challenge_id: 178, 
duel_id: 13, 
accept: nil> 

형태

<%= form_for @dueler do |f| %> 
    <%= f.button "Accept", name: "button_action", value: "accept" %> 
    <%= f.button "Decline", name: "button_action", value: "decline" %> 
<% end %> 

duelers_controller의 값을 변경합니다 오류를 수정할 수 있습니다 .rb

def update 
    if params['button_action'] == 'accept' 
    @dueler.accept = 1 
    else 
    @dueler.accept = 0 
    end 
    @dueler.update(dueler_params) 
    redirect_to :back 
end 

def dueler_params 
    params.require(:dueler).permit(:id, :duel_id, :user_id, :challenge_id, :accept) 
end 

터미널

Processing by DuelersController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"zn6Z9XuCQ2JahhtrZzFpEl3ENe+bcmOdDH/gz6VZ4p0mnRvgwpixdF2uA/sFgaQZFu2dEKR0DivQpJLqu96pxg==", "button_action"=>"accept", "id"=>"15"} 

매개 변수가 내가 어떤 오류가 발생하지 않는 check_mark:accept에 제출할 때처럼 보이는 방법이됩니다 :

Processing by DuelersController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"KWDac1I2rNRZd6oeCan0F7qlNY4c5K5vd6U988MJ6n3Bg1hm6yxewl5fso5rGTkc8YydcSPiw9mrfk/W3Y6hJg==", "dueler"=>{"accept"=>"1"}, "commit"=>"Update Dueler", "id"=>"15"} 

답변

1

빠른 수정 옵션 1 :

<%= form_for @dueler do |f| %> <%= f.button "Accept", name: "dueler[button_action]", value: "accept" %> <%= f.button "Decline", name: "dueler[button_action]", value: "decline" %> <% end %>

빠른 수정 옵션 2 :

def dueler_params params.permit(:id, :duel_id, :user_id, :challenge_id, :button_action) end

옵션 3 - 큰 변화하지만, 내가 좋아하는 것이 가장

형태

,

<%= form_for @dueler do |f| %> <%= f.button "Accept", name: "dueler[accept]", value: 1 %> <%= f.button "Decline", name: "dueler[accept]", value: 0 %> <% end %>

duelers_controller.rb def update @dueler.update(dueler_params.merge(accept: dueler_params[:accept].to_i)) redirect_to :back end

어느 옵션이 특정 오류 과거를 얻어야한다. 그러나 코드가 어떻게 작동하는지 완벽하게 이해하지 못하는 것 같습니다. 나는 컨트롤러의 다음 부분은 당신이 기대하는 것보다 다르게 작동 할 것으로 예상 :

if params['button_action'] == 'accept' @dueler.accept = 1 else @dueler.accept = 0 # "accept" sounds like a Boolean piece of data to me, but it looks like you're saving it as an integer end @dueler.update(dueler_params) # I expect you'll get "undefined method `button_action=' for #<Dueler:0x007fc4fac732d0>" here

당신은 button 및 회전에 전달하는 방법을 인수 이해 form_for와 강력한 매개 변수 좀 더 플레이 할 수 있습니다

HTML로 변환 한 다음 매개 변수로 변환하고 컨트롤러에서 처리하는 방법을 설명합니다.

+0

'옵션 3'이 완벽하게 작동했습니다. 추가 설명을 제공해 주셔서 감사합니다! –

0

강한 매개 변수가 떨어지는 것 같다 그것이 "dueler"와 관련이 없기 때문에 "accept"값. 보기에 숨겨진 확인란을 넣은 다음 해당 값으로 확인란을 설정하고 양식을 제출하는 클릭 할 리스너를 통해 함수를 호출해볼 수도 있습니다.

나는 그것이 "옳은"방법이라고 말하지는 않지만 귀하의 경우에 효과가있을 수 있습니다.

관련 문제