2017-12-07 5 views
0

양식에 숨겨진 필드를 사용하여 값이 1 인 매개 변수를 내 컨트롤러의 메서드에 전달하면 장바구니의 주문 항목 수량에 값이 추가됩니다. 바인딩 핑으로 얻는 것을 확인하면 params에 대해 : update_by 매개 변수가 전달하려고 시도 중입니다. "order_items=>{"update_by"=>"1"}입니다. 그래서, params[:update_by]을 사용하는 메소드에서 param을 잡으려고 할 때, nil (또는 .to_i이면 0)을 얻습니다. 왜 param은 객체입니까?Param 숨겨진 필드를 통과하려고하면 객체로 표시됩니까?

내가 내 방법의 다른 varaiables에서 원하는 데이터를 잡는 오전 컨트롤러

def update 
    @order = current_order 
    @item = OrderItem.find(params[:id]) 
    @item.update(:quantity=> @item.quantity + params[:update_by].to_i) 
    @item.save! 
    redirect_to cart_path 
end 

private 

def item_params 
    params.require(:order_item).permit(:quantity, :product_id, 
    :user_id, :update_by) 
    end 
end 

의 형태

<% if @order_items.any? %> 
    <% @order_items.each do |item| %> 
    <%= form_for item do |f| %> 
     <%= f.hidden_field :update_by, value: 1 %> 
     <%= button_tag type:"submit", class: "cart_quantity_button" 
     do %> 
     <i class="fa fa-plus-circle" aria-hidden="true"></i> 
     <% end %> 
    <% end %> 
<% end %> 

그리고 방법에 대한 HTML을 참조하십시오. 문제는 내가 값을 붙잡을 수 없다는 것입니다 : update_by 그것이 객체라면, 맞습니까? 더 자세한 정보가 필요하면 알려주세요. 감사!

답변

0

내 친구가 숨겨진 양식 필드 대신 버튼의 매개 변수 값을 이동하여 나를위한 해결책을 찾았습니다.

<%= form_for (item) do |f| %> 
    <% button_tag type:"submit", :value => item.quantity.to_i + 1, class: "cart_quantity_button" do %> 
     <p><i class="fa fa-plus-circle" aria-hidden="true"></i></p> 
    <% end %> 
    <% end %> 

    <%= form_for (item) do |f| %> 
    <% button_tag type:"submit", :value => item.quantity.to_i - 1, class: "cart_quantity_button" do %> 
     <p><i class="fa fa-minus-circle" aria-hidden="true"></i></p> 
    <% end %> 
    <% end %> 

이 솔루션에 대한 설명이 있으면 알려 주시기 바랍니다. 우린 둘 다 멍청이야. 감사!

0

당신은 양식이 있습니다

<%= form_for item do |f| %> 
    <%= f.hidden_field :update_by, value: 1 %> 
    ... 
<% end %> 

itemOrderItem입니다. 즉, f의 메소드가 생성하는 모든 것 (예 : f.hidden_field)은 order_item 네임 스페이스 안에 있습니다. 따라서 귀하의 컨트롤러에는

"order_item"=>{"update_by"=>"1"} 

이 있습니다. 또한 item_params 컨트롤러 메소드에서 볼 수 있습니다

def item_params 
    params.require(:order_item).permit(:quantity, :product_id, :user_id, :update_by) 
    end 
end 

require 호출하면 "order_item" 찾고과 permit 전화가 당신이 그 일을 찾고 있음을 내부"order_item" 의미 있다는 것을 의미한다.

당신은 매개 변수를 풀고 당신의 item_params 방법을 사용한다 :

@item.update(:quantity => @item.quantity + item_params[:update_by].to_i) 
+0

은 와우, 많은 이해된다. 나는 item_params에서': update_by'를 제거하고'@ item.update (: quantity => params [: button]) '를 대신 사용하여 메소드의 수량을 업데이트한다는 것을 잊어 버렸습니다. 누군가가 그것에 대해 혼란스러워했다. –

관련 문제