2016-04-07 18 views
0

Ich bin relativ neu zu Rails so nüchtern mit mir, wenn diese Frage eine einfache Lösung ist, aber ich habe andere SO-Beiträge und andere Bereiche im Internet ohne Glück durchsucht.NoMethodError/Undefined-Methode bei der Verwendung von Stripe In Teil

Ich habe Striped in meine App implementiert, aber ich versuche, meine "Upgrade-Mitgliedschaft" -Option in eine partielle zu verschieben. Ich habe den Code innerhalb einer partiellen und versucht, die teilweise in meiner Benutzer # Show-Ansicht und der Seite wird nicht korrekt geladen und es gibt mir den unten aufgeführten Fehler.Wenn ich meine Gebühren # neue Ansicht (das war die Standardansicht, die ich vor dem Versuch, alles auf meine Benutzer zu verschieben # Ansicht anzeigen), laden die Ansicht geladen und zwar ohne problem. Aber wenn ich es in die Partial und ich versuche, die Partial in meiner Benutzer # Show zu verwenden, bekomme ich eine NoMethodError/Undefined Method und ich kann nicht scheinen scheinen Warum?

Unten ist der Fehler und mein Code (ich habe einen Kommentar zu der Zeile hinzugefügt, die in der Fehlermeldung hervorgehoben ist). Bitte lassen Sie mich wissen, wenn weitere Codes/Informationen hinzugefügt werden müssen. Vielen Dank im Voraus für jede Hilfe!

Fehler

NoMethodError in Users#show 
undefined method `[]' for nil:NilClass 

<h4>Upgrade To Premium</h4> 
    <script class='stripe-button' src="https://checkout.stripe.com/checkout.js" 
            data-key="<%= @stripe_btn_data[:key] %>" #highlighted line in the error 
            data-amount=<%= @stripe_btn_data[:amount] %> 
            data-description="<%= @stripe_btn_data[:description] %>" 
            data-email="<%= current_user.email %>" > 

_form Teil

<% if current_user.premium? %> 
    <%= render partial: "charges/downgrade" %> 
<% else %> 
    <%= form_tag charges_path do %> 
    <h4>Upgrade To Premium</h4> 
    <script class='stripe-button' src="https://checkout.stripe.com/checkout.js" 
            data-key="<%= @stripe_btn_data[:key] %>" 
            data-amount=<%= @stripe_btn_data[:amount] %> 
            data-description="<%= @stripe_btn_data[:description] %>" 
            data-email="<%= current_user.email %>" > 
    </script> 
    <% end %> 
<% end %> 

Benutzer # zeigen

<div class="container"> 
    <h2><%= @user.email %></h2> 
    <% @wikis.each do |wiki| %> 
    <ul> 
     <li><%= link_to wiki.title, @wiki %></li> 
    </ul> 
    <% end %> 
</div> 
<br /> 
<div class="container"> 
    <%= render partial: "charges/form" %> 
</div> 

ich ein anderes pa haben rial, dass ich innerhalb der partiellen verwenden, dass ich einen Fehler habe, nicht sicher, ob es verwandt ist, aber hier ist es nur für den Fall.

Herunterstufung Teil

<%= button_to 'Downgrade Membership', user_downgrade_path(current_user), class: 'btn' %> 

Kosten-Controller

class ChargesController < ApplicationController 

    def create 
    # Creates a Stripe Customer object, for associating with the charge 
    customer = Stripe::Customer.create(
     email: current_user.email, 
     card: params[:stripeToken] 
    ) 

    charge = Stripe::Charge.create(
     customer: customer.id, # Note -- this is NOT the user_id in your app 
     amount: 15_00, 
     description: "Premium Membership - #{current_user.email}", 
     currency: 'usd' 
    ) 

    current_user.update_attributes!(role: 'premium') 

    flash[:notice] = "Thank you for upgrading to a Premium Membership, #{current_user.email}!" 
    redirect_to root_path # or wherever 

    # Stripe will send back CardErrors, with friendly messages 
    # when something goes wrong. 
    # This 'rescue block' catches and displays those errors. 
    rescue Stripe::CardError => e 
    flash[:alert] = e.message 
    redirect_to new_charge_path 
    end 

    def new 
    if user_signed_in? 
     @amount = 15_00 
     @stripe_btn_data = { 
     key: "#{ Rails.configuration.stripe[:publishable_key] }", 
     description: "BigMoney Membership - #{current_user.email}", 
     amount: @amount 
     } 
    else 
     redirect_to root_path 
     flash[:notice] = "You must be signed in to do that." 
    end 
    end 
end 

Antwort

0

Ended up etwas dumm und leicht zu sein. Ich musste @stripe_btn_data innerhalb meiner user_controller definieren, da ich das Teil in einer Benutzeransicht verwende.

Verwandte Themen