테이블에 없는 열에도 값을 넣어 보낼 수 있는 건
4828 단어 Rails
소개
EC사이트를 만들어 보았습니다만, 이하의 이미지와 같이, 전달처를 몇개의 선택사항중에서 체크 박스로 선택하는 장면에서 어떻게 하면 좋은지 조금 당황했기 때문에 정리해 둡니다.
몰랐던 것
선택지에 값을 갖게 해, 그 값에 의해 콘트롤러로 처리를 나누는 곳까지는 상상이 붙었습니다만, 이번으로 말하면, 주문 테이블에 선택지(option) 컬럼은 없기 때문에 어떻게 하면 좋을까 당황했습니다.
일단, option = 0
그렇다면 「자신의 주소」, option = 1
그렇다면 「등록이 끝난 주소로부터 선택」으로서 이하와 같이 써 보았습니다.
orders/new.html.erb<%= form_with model: @order, url: orders_confirm_path , method: :post, local: true do |f| %>
<div class="form-group">
<h6>お届け先</h6>
<%= f.radio_button :option, "0" %>
<%= f.label 'ご自身の住所' %><br>
<%= '〒' %>
<%= current_customer.postal_code %>
<%= current_customer.address %>
<%= current_customer.last_name %>
<%= current_customer.first_name %><br><br>
<%= f.radio_button :option, "1" %>
<%= f.label '登録済みの住所から選択' %><br>
<%= f.select :address_id, current_customer.addresses.map { |address| [address.postal_code + address.address + address.name, address.id] }, :include_blank => "選択してください" %><br><br>
(略)
<%= f.submit '確認画面へ進む', class: "btn btn-info" %>
</div>
<% end %>
controllers/orders_controller.rbclass Public::OrdersController < ApplicationController
def confirm
@order = Order.new(order_params)
if params[:order][:option] == '0'
#省略
elsif params[:order][:option] == '1'
#省略
end
end
private
def order_params
params.require(:order).permit(:postal_code,:address,:name,:payment_method,:shipping_cost,:total_payment,:status,:customer_id)
end
end
option 컬럼은 order 테이블에 없고, 스트롱 파라미터에도 포함하지 않는 것이 좋은지, params[:order][:option] 와 같이 계층으로 해도 좋을지, 등 여러가지 의문에 생각하면서도 우선 입력해 「확인 화면으로 이동 버튼을 눌러 보았습니다.
결과
아래와 같이 Unpermitted parameters: :option
라고 나와 버립니다만, 우선 값이 들어간 option이 건네지고 있는 것을 알았습니다.
Processing by Public::OrdersController#confirm as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"省略", "order"=>{"option"=>"0"}, "commit"=>"確認画面へ進む"}
Unpermitted parameters: :option
아무래도, 이런 경우는 Unpermitted parameters
이 나와도 무시해도 좋은 것 같습니다. 상당히 놀랐습니다! 스트롱 파라미터에 option 컬럼은 없기 때문에 DB에 보존되지 않습니다만, @order
라고 하는 상자에 일시적으로 option 컬럼을 만들어, 거기에 값을 넣어 운반하고 있는 이미지인 것 같습니다. 이것이라면 params[:order][:option]와 같이 계층에서 꺼내는 것도 납득입니다. 아니 - 안쪽이 깊다.
Reference
이 문제에 관하여(테이블에 없는 열에도 값을 넣어 보낼 수 있는 건), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakuMatsunaga/items/aaea4028a2bd23228a0d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
선택지에 값을 갖게 해, 그 값에 의해 콘트롤러로 처리를 나누는 곳까지는 상상이 붙었습니다만, 이번으로 말하면, 주문 테이블에 선택지(option) 컬럼은 없기 때문에 어떻게 하면 좋을까 당황했습니다.
일단,
option = 0
그렇다면 「자신의 주소」, option = 1
그렇다면 「등록이 끝난 주소로부터 선택」으로서 이하와 같이 써 보았습니다.orders/new.html.erb
<%= form_with model: @order, url: orders_confirm_path , method: :post, local: true do |f| %>
<div class="form-group">
<h6>お届け先</h6>
<%= f.radio_button :option, "0" %>
<%= f.label 'ご自身の住所' %><br>
<%= '〒' %>
<%= current_customer.postal_code %>
<%= current_customer.address %>
<%= current_customer.last_name %>
<%= current_customer.first_name %><br><br>
<%= f.radio_button :option, "1" %>
<%= f.label '登録済みの住所から選択' %><br>
<%= f.select :address_id, current_customer.addresses.map { |address| [address.postal_code + address.address + address.name, address.id] }, :include_blank => "選択してください" %><br><br>
(略)
<%= f.submit '確認画面へ進む', class: "btn btn-info" %>
</div>
<% end %>
controllers/orders_controller.rb
class Public::OrdersController < ApplicationController
def confirm
@order = Order.new(order_params)
if params[:order][:option] == '0'
#省略
elsif params[:order][:option] == '1'
#省略
end
end
private
def order_params
params.require(:order).permit(:postal_code,:address,:name,:payment_method,:shipping_cost,:total_payment,:status,:customer_id)
end
end
option 컬럼은 order 테이블에 없고, 스트롱 파라미터에도 포함하지 않는 것이 좋은지, params[:order][:option] 와 같이 계층으로 해도 좋을지, 등 여러가지 의문에 생각하면서도 우선 입력해 「확인 화면으로 이동 버튼을 눌러 보았습니다.
결과
아래와 같이 Unpermitted parameters: :option
라고 나와 버립니다만, 우선 값이 들어간 option이 건네지고 있는 것을 알았습니다.
Processing by Public::OrdersController#confirm as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"省略", "order"=>{"option"=>"0"}, "commit"=>"確認画面へ進む"}
Unpermitted parameters: :option
아무래도, 이런 경우는 Unpermitted parameters
이 나와도 무시해도 좋은 것 같습니다. 상당히 놀랐습니다! 스트롱 파라미터에 option 컬럼은 없기 때문에 DB에 보존되지 않습니다만, @order
라고 하는 상자에 일시적으로 option 컬럼을 만들어, 거기에 값을 넣어 운반하고 있는 이미지인 것 같습니다. 이것이라면 params[:order][:option]와 같이 계층에서 꺼내는 것도 납득입니다. 아니 - 안쪽이 깊다.
Reference
이 문제에 관하여(테이블에 없는 열에도 값을 넣어 보낼 수 있는 건), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakuMatsunaga/items/aaea4028a2bd23228a0d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Processing by Public::OrdersController#confirm as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"省略", "order"=>{"option"=>"0"}, "commit"=>"確認画面へ進む"}
Unpermitted parameters: :option
Reference
이 문제에 관하여(테이블에 없는 열에도 값을 넣어 보낼 수 있는 건), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TakuMatsunaga/items/aaea4028a2bd23228a0d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)