我有一个简单的表格,使用条纹结帐付款如下:
<%= 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]
非常感谢。
答案 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
保存订单