【问题标题】:Rails : record not save from formRails:记录不从表单中保存
【发布时间】:2017-04-28 11:29:18
【问题描述】:

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

<%= 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"=>"✓", "order"=>{"test"=>"VALUE ENTERED"}

Order.last #

谢谢

编辑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: "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]

还是谢谢。

【问题讨论】:

  • 你为什么要用["2465"].each do |amount|来创建一个字段?

标签: ruby-on-rails ruby forms record


【解决方案1】:

您没有保存订单

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

【讨论】:

  • 好吧,我实际上是在这几行代码下面一点点保存订单。有关已保存记录的完整跟踪,请参阅我的编辑。记录的测试值仍然为零。
  • 用表单助手解决了这个问题。请参阅更新的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多