【发布时间】:2015-10-27 02:00:07
【问题描述】:
我有一个request 对象,我想将它传递给我的charges_controller。我可以将它传递给new 操作,但在调用新操作之后,我需要将相同的request 对象传递给相同charges_controller 中的创建对象。我不明白。这是将request_id 传递给费用控制器的初始request_controller 操作。
class Users::RequestsController < ApplicationController
before_filter :authenticate_user!
def create
@user = current_user
if @request = @user.request.create!(authorization_params)
if @request.user_paying == true
redirect_to new_users_charge_path(id: @request)
else
redirect_to users_dashboard_path
end
else
redirect_to users_dashboard_path, :error => "There is something wrong and your request has not been submitted."
end
end````
然后它将它传递给费用控制器中的新方法。这是我的收费控制器。
class Managers::ChargesController < ApplicationController
before_filter :authenticate_user!
def new
@request = Request.find(params[:id])
@user = current_user
@amount = @request.user_amount
end
def create
# Amount in cents
@request = Request.find params[:request_id]
@user = current_user
@amount = @request.user_amount
customer = Stripe::Customer.create(
:email => @user.email,
:card => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Manager Paid Report',
:currency => 'usd'
)
@request.report_paid = true
@request.save!
redirect_to managers_dashboard_path, :notice => "You have succesfully requested a pre-paid report from #{@reportapproval.tenant_last_name}."
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to managers_charges_path
end
end
我可以在charges/new.html 视图中获取请求信息。但是当我创建费用时,找不到请求。如何将请求传递给创建操作?
这是新视图...
<h4>Total Payment Due: <%= number_to_currency(@amount.to_i/100.0) %>
<%= form_tag users_charges_path do %>
<%= hidden_field_tag :request_id, @request.id %>
<br />
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="Payment"
data-amount="<%= @amount %>"
data-locale="auto" >
</script>
<% end %>
【问题讨论】:
-
控制器之间不应直接通信。它们应该干燥且短。您是否考虑过将此业务逻辑移植到服务或控制器下方的公共层上?
-
我认为您不需要传递请求:我认为您只需要传递一些少量数据,例如请求对象的 id。这可以最干净地在参数中传递。
-
@matheus208 我很新,我听说过服务,我会阅读它们。我认为它们与实际模型不同。
-
@max 实际上我只需要收费就可以从请求中获取信息并发布到请求中。在我的控制器中,它试图通过 id 查找请求,但我不确定如何让新通行证创建 ID
标签: ruby-on-rails model-view-controller mongoid stripe-payments