2016-04-07 8 views
0

Bu soru kolay bir çözümse, Rails bana oldukça çıplak geliyor, ancak başka SO yayınlarına ve web'de başka hiçbir alana şanssızca göz attım.NoMethodError/Tanımsız Yöntem Kısmı Kullanırken Stripe Kullanmaya Çalışırken

Uygulamamda Stripe uygulamıyorum ancak "Yükseltme Üyeliği" seçeneğini bir kısma taşımayı deniyorum. Kodu kısmi olarak ekledim ve kısmi kullanıcılarım # show görünümünde kullanmamayı denedim sayfa doğru yüklenmeyecek ve bana aşağıda listelenen hatayı veriyor.Yeni masraflarımı ziyaret ettiğimde (bu, kullanıcılarımın # show view'ına her şeyi taşımaya çalışmadan önce ayarladığım varsayılan görünümdü), görünüm yükler ve hiçbir sorun olmadan. Ama kısmi olarak attığımda ve kullanıcılarımı # show'ta kısmi olarak kullanmaya çalıştığımda, bir NoMethodError/Undefined Method alıyorum ve neden dışarıda.

Hata ve kodum aşağıda (Hata iletisinde vurgulanan satır hakkında bir yorum ekledim). Başka bir kod/bilgi eklenmesi gerekiyorsa lütfen bana bildirin. Herhangi bir yardım için şimdiden teşekkür ederiz!

Hata

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 Kısmi

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

Kullanıcılar #

<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> 

Başka pa var göstermek Ben kısmi içinde kullanıyorum rtial, ilişkili olup olmadığından emin değilim ama burada sadece durumda.

Düşürme Kısmi

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

Masraflar Kontrolör şey aptal ve kolay olmak kadar sona erdi

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 

cevap

0

. Bir kullanıcı görünümünde kısmi kullanıyorum çünkü user_controller içinde @stripe_btn_data tanımlamak gerekiyordu.