Rails:レコードがフォームから保存されない
概要
次のように、支払いにストライプチェックアウトを使用する単純なフォームがあります。
<%= form_for Order.new do |f| %>
<!-- Price -->
<% ["2465"].each do |amount| %>
<input type="hidden" name="amount" value="<%= amount %>" />
<% end %>
<!-- Description -->
<% ["A product"].each do |description| %>
<input type="hidden" name="description" value="<%= description %>" />
<% end %>
<!-- variable string -->
<%= f.text_field :test %>
<!-- Stripe script -->
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-panel-label="Payer {{amount}}"
data-label="Payer 24,65€"
data-billing-address="true"
data-shipping-address="true"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>">
</script>
<% end %>
ご覧のとおり、支払いのためにストライプ ポップアップを起動する前にユーザーが入力できるフィールドがあります。
<!-- variable string -->
<%= f.text_field :test %>
問題は、ユーザーが何を入力しても、データベースには常に nil が返されるということです。
次のように、orders_controller.rb から値を取得しようとしています。
def create
@order = Order.new
charge_error = nil
# Amount in cents
if @order.valid?
# some stripe set up goes here...
@order.description = params[:description]
@order.amount = params[:amount]
@order.test = params[:test]
end
end
コンソールからは、文字列がパラメータに入力されますが、レコード内では常に空が返されます。
OrdersController#createによるHTML処理 パラメータ: {“utf8”=>“✓”、“order”=>{“test”=>“VALUE ENTERED”}
ありがとう
編集1: 一度保存された記録の完全なトレース:
=> #<Order id: 82, name: "jérémy zaccherini", created_at: "2017-04-28 12:08:41", updated_at: "2017-04-28 12:08:41", card_token: "tok_1ADXtnA5xCR7Wb7xlUyLKfIN", email: "[email protected]", address_line1: "Residence feuch, 75004 PARIS", address_zip: "75004", address_country: "France", address_city: "PARIS", description: "MpyProduct", amount: "2465", status: "Non traitée", test: nil>
ソリューションの編集:
フォームヘルパーに関する Ruby のドキュメントをもう一度読んでください。解決策は、私のフォームで次のようなフォームヘルパーを使用することでした。
<!-- variable string -->
<%= text_area_tag(:test) %>
このようにして、コントローラーから入力されたユーザーの値を取得できます。
@order.test = params[:test]
とにかくありがとう。
解決策
注文を保存していません
def create
@order = Order.new
charge_error = nil
# Amount in cents
if @order.valid?
# some stripe set up goes here...
@order.description = params[:description]
@order.amount = params[:amount]
@order.test = params[:test]
end
@order.save
end
値を設定した後、 @order.save で注文を保存します