Techioz Blog

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 で注文を保存します