Rails:记录不能从表单中保存

时间:2017-04-28 11:29:19

标签: ruby-on-rails ruby forms record

我有一个简单的表格,使用条纹结帐付款如下:

<%= 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 as HTML   参数:{“utf8”=&gt;“✓”,“order”=&gt; {“test”=&gt;“VALUE ENTERED”}

  

Order.last    #&LT;订单ID:74,测试:nil&gt;

由于

EDIT1: 保存后的完整记录:

 => #<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: "zaccherini.jeremy@gmail.com", 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 doc about form helpers,解决方法是在我的表单中使用这样的表单助手:

<!-- variable string -->
  <%= text_area_tag(:test) %>

这样我就可以检索从我的控制器输入的用户值:

@order.test = params[:test]

非常感谢。

1 个答案:

答案 0 :(得分:0)

您没有保存订单

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保存订单