Unpermitted parameters: どうしたら???
解決したいこと
カード情報を受け取り、保存する
例)
カード決済機能の実装しています
購入画面で、購入を押すと
保存できず、indexを再読み込みしています
発生している問題・エラー
カード情報が受け取れていない
例)
Unpermitted parameters: :card_number, :exp_mouth, :exp_year, :cvc
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
card.js
const pay = () => {
const payjp = Payjp(process.env.PAYJP_PUBLIC_KEY)
const submit = document.getElementById("button");
submit.addEventListener("click", (e) => {
e.preventDefault();
const formResult = document.getElementById("charge-form");
const formData = new FormData(formResult);
const card = {
number: formData.get("order_payment[number]"),
cvc: formData.get("order_payment[cvc]"),
exp_month: formData.get("order_payment[exp_month]"),
exp_year: `20${formData.get("order_payment[exp_year]")}`,
};
Payjp.createToken(card, (status, response) => {
if (status == 200) {
const token = response.id;
const renderDom = document.getElementById("charge-form");
const tokenObj = `<input value=${token} name='token' type="hidden">`;
renderDom.insertAdjacentHTML("beforeend", tokenObj);
}
document.getElementById("card-number").removeAttribute("name");
document.getElementById("card-cvc").removeAttribute("name");
document.getElementById("card-exp-month").removeAttribute("name");
document.getElementById("card-exp-year").removeAttribute("name");
document.getElementById("charge-form").submit();
});
});
};
window.addEventListener("load", pay);
orders_controller.rb
class OrdersController < ApplicationController
before_action :set_item, only: [:index, :create]
def index
@order = Order.new
@order_payment = OrderPayment.new
end
def create
binding.pry
@order_payment= OrderPayment.new(order_params)
if @order_payment.valid?
pay_item
@order_payment.save
redirect_to root_path
else
render :index
end
end
private
def set_item
@item = Item.find(params[:item_id])
end
def order_params
params.require(:order_payment).permit(:post_code, :prefecture_id, :city, :block,
:building, :phone_number)
.merge(user_id: current_user.id, item_id: @item_id, token: params[:token])
end
def pay_item
Payjp.api_key = ENV["PAYJP_SECRET_KEY"]
Payjp::Charge.create(
amount: @item.price,
card: order_params[:token],
currency:'jpy'
)
end
end
order_payment.rb
class OrderPayment < ApplicationRecord
include ActiveModel::Model
attr_accessor :user_id, :item_id, :post_code, :prefecture_id, :city, :block, :building, :phone_number, :token
with_options presence: true do
validates :user_id
validates :item_id
validates :post_code, format: { with: /\A[0-9]{3}-[0-9]{4}\z/, message: 'is invalid. Include hyphen(-)' }
validates :prefecture_id, numericality: { other_than: 0, message: "can't be blank" }
validates :city
validates :block
validates :phone_number, format: { with: /\A\d{10,11}\z/, message: 'is invalid' }
validates :token
end
def save
order = Order.create(user_id: user_id, item_id: item_id)
Payment.create(order_id: order.id, post_code: post_code, prefecture_id: prefecture_id,
city: city, block: block, building: building, phone_number: phone_number, order_id: order.id)
end
end
自分で試したこと
card.jsのid確認、
controlllerの確認
params確認
0 likes