Ruby on 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> <

我有一个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>
      <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]