在 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 来查找请求。
我不太清楚你要做什么。我不明白您为什么不直接使用模型方法来创建客户和收费。
我有一个 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 来查找请求。
我不太清楚你要做什么。我不明白您为什么不直接使用模型方法来创建客户和收费。