2012-10-06 5 views
0

J'ai été capable d'intégrer la bande en utilisant le tutoriel de Ryan Bates. Maintenant, j'aimerais pouvoir autoriser les utilisateurs à mettre à jour leurs informations de carte de crédit. J'ai mis en place un formulaire, à change_plan_path, qui envoie une requête A PUT aux utilisateurs/update_card. Cependant, lorsque je clique sur le bouton de la carte de crédit de mise à jour, je reçois l'erreur:Modèle manquant -> Pour la demande PUT

Template is missing 

Missing template users/update_card, application/update_card with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "C:/Sites/dentist/app/views" 

Voici la forme que je utilise pour envoyer le PUT demande:

<%= form_tag("https://stackoverflow.com/users/update_card", :method => "put", :class => "edit_user", :id => "change_card") do %> 
    <%= hidden_field_tag :stripe_card_token %> 

    <div id="stripe_error" class="alert"> 
     <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript> 
    </div> 

    <div class="field"> 
     <%= label_tag :card_number, "Credit Card Number" %> 
     <%= text_field_tag :card_number, nil, name: nil %> 
    </div> 
    <div class="field"> 
     <%= label_tag :card_code, "Security Code on Card (CVV)" %> 
     <%= text_field_tag :card_code, nil, name: nil %> 
    </div> 
    <div class="field"> 
     <%= label_tag :card_month, "Card Expiration" %> 
     <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"} %> 
     <%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %> 
    </div> 


    <%= submit_tag("Update My Credit Card", :class => "button") %> 

Voici mon fichier routes.rb:

put '/users/update_plan', to: 'users#update_plan' 
    put '/users/update_card', to: 'users#update_card' 
    resources :users 
    resources :sessions, only: [:new, :create, :destroy] 
    resources :phones, only: [:new, :create, :destroy] 
    resources :find_numbers, only: [:new, :create] 

    match '/signup', to: 'users#new' 
    match '/login', to: 'sessions#new' 
    match '/signout', to: 'sessions#destroy', via: :delete 
    match '/change_plan', to: 'users#change_plan' 
    match '/change_card', to: 'users#change_card' 

    root to: 'static_pages#home' 

    match '/product_demo', to: 'static_pages#product_demo' 

    match '/pricing', to: 'plans#index' 

    match '/contact', to: 'static_pages#contact' 

Et voici le Coffescript que j'utilise. Cela ne semble même pas encore fonctionner, mais peut-être que cela a quelque chose à voir avec ça. (Commencez par changecard.setupForm())

jQuery -> 
    Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')) 
    subscription.setupForm() 

subscription = 
    setupForm: -> 
    $('#new_user').submit -> 
     $('input[type=submit]').attr('disabled', true) 
     if $('#card_number').length 
     subscription.processCard() 
     false 
     else 
     true 

    processCard: -> 
    card = 
     number: $('#card_number').val() 
     cvc: $('#card_code').val() 
     expMonth: $('#card_month').val() 
     expYear: $('#card_year').val() 
    Stripe.createToken(card, subscription.handleStripeResponse) 

    handleStripeResponse: (status, response) -> 
    if status == 200 
     $('#user_stripe_card_token').val(response.id) 
     $('#new_user')[0].submit() 
    else 
     $('#stripe_error').text(response.error.message) 
     $('input[type=submit]').attr('disabled', false) 

changecard.setupForm() 

changecard = 
    setupForm: -> 
    $('#change_card').submit -> 
     $('input[type=submit]').attr('disabled', true) 
     if $('#card_number').length 
     subscription.processCard() 
     false 
     else 
     true 

    processCard: -> 
    card = 
     number: $('#card_number').val() 
     cvc: $('#card_code').val() 
     expMonth: $('#card_month').val() 
     expYear: $('#card_year').val() 
    Stripe.createToken(card, subscription.handleStripeResponse) 

    handleStripeResponse: (status, response) -> 
    if status == 200 
     $('#user_stripe_card_token').val(response.id) 
     $('#change_card')[0].submit() 
    else 
     $('#stripe_error').text(response.error.message) 
     $('input[type=submit]').attr('disabled', false) 

Répondre

1

Habituellement, lorsque vous obtenez cette erreur, il est après l'action du contrôleur a exécuté et il essaie de rendre quelque chose au navigateur. À moins que vous ne lui disiez explicitement ce qu'il faut restituer, il essayera de servir une vue basée sur le contrôleur/l'action. Sans savoir à quoi ressemble votre contrôleur, il est difficile de dire exactement ce qu'il se passe après que l'information a été mise à jour. Je m'attendrais à ce que vous vouliez soit rediriger vers une nouvelle page, soit rendre une page.

Si vous souhaitez rediriger, vous pouvez faire avec redirect_to et spécifier le chemin. Dans l'exemple suivant, je suppose que vous voulez rediriger vers l'action show utilisateur:

redirect_to user_url(current_user) 

Si vous voulez rendre un contenu, vous devez créer un modèle html pour update_card.html.erb ou rendre un contenu arbitraire comme:

render :text => "yay" 
+0

Nice! Merci pour l'aide Beerlington - J'ai écrit le code de l'action dans une action différente ... très naïf de moi. –

+0

Ça va le faire :) –