在 rails 中将对象传递给另一个控制器

Passing an object to another controller in rails

我有一个 request 模型。当我从我拥有的表单创建新的 request 时,如果 "request" 模型中的一项为真,那么我想将用户发送到收费页面。然后我想从 request 中获取其中一个字段来设置收费金额。我正在通过控制器执行此操作,但 charge 没有获取 request 对象以从中获取数量。这是我的 request 控制器。

def create
  @user = current_user
    if @request = @user.request.create!(authorization_params)
      if @request.must_pay == true
        redirect_to new_users_charge_path(@request), :notice => "Please make payment before proceeding"
      else
        redirect_to users_dashboard_path, :notice => "Success"
      end
    else
      redirect_to users_dashboard_path, :error => "Oops!"
    end

def authorization_params
      params.require(:request).permit( :field_1, :field_2, etc...)
end

因此,当它将此 request 传递到新的充电路径时,我想从 request 中获取支付金额字段,因此我的充电控制器看起来像这样。

def create
  # Amount in cents
  @request = Request.find(params[:id])
  @user = current_user
  @amount = @request.how_much_to_pay

  customer = Stripe::Customer.create(
    :email => @user.email,
    :card  => params[:stripeToken]
    ) 

  charge = Stripe::Charge.create(
    :customer    => customer.id,
    :amount      => @amount,

但我一直收到错误 undefined method `how_much_to_pay' for nil:NilClass

所以我认为它不会将请求传递给充电控制器。我错过了什么?

这是创建的费用表格。

<%= form_tag users_charges_path do %>
  <article>
    <label class="amount">
      <span>Amount: <%= number_to_currency (@request.how_much_to_pay.to_i/100) %></span>
    </label>
  </article>

  <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
          data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
          data-description="..."
          data-amount="<%= @request.how_much_to_pay %>"
          data-locale="auto"></script>
<% end %>

@request 为零,因此 Request.find(params[:id]) 未找到任何内容。所以它没有在参数中获取 id 来查找请求。

我不太清楚你要做什么。我不明白您为什么不直接使用模型方法来创建客户和收费。