Ruby on rails 从Rails嵌套表单访问参数
我有一个Rails表单,其中包含一个生成条带支付表单的脚本。表单中嵌套了一个用于标记的Ruby on rails 从Rails嵌套表单访问参数,ruby-on-rails,Ruby On Rails,我有一个Rails表单,其中包含一个生成条带支付表单的脚本。表单中嵌套了一个用于标记的字段。这是我的全部费用/new.html.erb文件: <div class="row"> <div class="col-md-2"></div> <div class="col-md-8"> <h3>Confirm address and make payment</h3> <
字段。这是我的全部费用/new.html.erb文件:
<div class="row">
<div class="col-md-2"></div>
<div class="col-md-8">
<h3>Confirm address and make payment</h3>
<br>
<%= form_tag charges_path do %>
<%= fields_for :charges do |f| %>
<div class="field">
<%= f.label :first_name %>
<%= f.text_field :first_name, size: 20, :value => current_user.first_name, :class => 'form-control' %>
</div>
<div class="field">
<%= f.label :last_name %>
<%= f.text_field :last_name, size: 20, :value => current_user.last_name, :class => 'form-control' %>
</div>
<div class="field">
<%= f.label :address %>
<%= f.text_area :address, size: 40, :value => current_user.address, :class => 'form-control' %>
</div>
<div class="field">
<%= f.label :city %>
<%= f.text_field :city, size: 20, :value => current_user.city, :class => 'form-control' %>
</div>
<div class="field">
<%= f.label :state %>
<%= f.text_field :state, size: 2, :value => current_user.state, :class => 'form-control' %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.text_field :email, size: 40, :value => current_user.email, :class => 'form-control' %>
</div>
<%= f.hidden_field :total_price, :value => @cart.total_price %>
<% end %>
<br>
<article>
<% if flash[:error].present? %>
<div id="error_explanation">
<p><%= flash[:error] %></p>
</div>
<% end %>
<label class="amount">
<span>Amount: <%= number_to_currency(@cart.total_price * 7.35) %></span>
</label>
</article>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="A one-time payment"
data-amount="<%= @cart.total_price * 735 %>"
data-locale="auto"></script>
<% end %>
</div>
<div class="col-md-2"></div>
</div>
问题是提交表单后没有发送id
,因此会出现错误
但是,您根本不需要该方法,因为您正在创建费用
,而其id
尚未创建。此外,您还可以在创建
操作的第一行中替换@charge
(在设置收费
中设置),即:
@charge = Charge.new(charge_params)
要修复错误,只需从控制器中删除以下行即可:
before_action :set_charge, only: [:create]
通常,您只希望在更新记录时使用此类回调(即查找现有记录),即仅使用edit
和update
操作
因此,如果您计划将此类操作添加到控制器中,请将上述行(而不是删除)更改为仅对edit
和update
操作执行:
before_action :set_charge, only: [:edit, :update]
谢谢你的建议。虽然我尝试过,但现在我的charge_params方法出现错误:param丢失或值为空:charge@matt由于您使用的是form_tag
,因此发送的属性不会在charge
键下分组,但您的强参数方法(即charge_params
)需要它。因此,请尝试删除require
,将该行保留为:params.permit(:first_name,:last_name,:address,:city,:state,:email,:total_price)
。当我尝试删除require时,表单提交时不会出现任何错误,但费用表中不会添加任何内容。@matt您能分享您的日志吗?其中显示发送的参数。是的,我刚刚将日志添加到我的第一篇文章的末尾。
before_action :set_charge, only: [:create]
before_action :set_charge, only: [:edit, :update]