2015-10-24 90 views
1

我有一個request模型。當我從一個表單中創建一個新的request時,如果「請求」模型中的某個項目爲真,那麼我想將用戶發送到收費頁面。然後我想要從request的其中一個字段設置收費金額。我通過控制器做到這一點,但charge沒有拿起request的對象來從中獲取金額。這是我的request控制器。當它通過這個request新的充電路徑傳遞對象到另一個控制器在rails中

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的,所以我的充電控制器看起來是這樣的。

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 %> 
+0

「authorization_params」在哪裏設置?你有沒有證實它不是空的? – Elvn

+0

已更新的問題。 「authorization_params」位於請求控制器中 – SupremeA

回答

1

@request is nil,所以Request.find(params [:id])沒有找到任何東西。所以它沒有在參數中找到一個id來找到請求。

我不完全清楚你想要做什麼。我不明白你爲什麼不使用模型方法來創建客戶和收費。

+0

請求是一個模型。所以如果即時通訊請求的ID從請求控制器時,它的創建不應該充電控制器撿起來? – SupremeA

+0

該請求具有必須收取的金額,因此收費需要從請求中接收該金額,然後才能收費。 – SupremeA

+0

如果你真的想這樣做,我認爲你需要指定密鑰。所以你可以做new_users_change_path(id:@request) – baron816

相關問題