Question

I'm attempting to update my stripe subscription via and edit page but it doesn't seem to like whatever i throw at it.

Here is my routes.rb

get 'subscribe' => 'subscribe#stepone'
  get 'subscribe/sliding-scale' => 'subscribe#steptwo'
  get 'subscribe/sliding-scale/subscriber' => 'subscribe#subscriber'
  get 'subscribe/sliding-scale/supporter' => 'subscribe#supporter'
  get 'subscribe/sliding-scale/sustainer' => 'subscribe#sustainer'
  post 'subscribe/sliding-scale/:type' => 'subscribe#createSubscription'
  get 'subscribe/edit' => 'subscribe#edit', :as => :edit_subscription
  match '/subscribe/edit', to: 'subscribe#deleteCard', via: :delete
  match '/subscribe/edit', to: 'subscribe#updateSubscription', via: :post
  post 'subscribe/edit/changeSubscription' => 'subscribe#changeSubscription', :as => :change_subscription

My subscription controller:

def changeSubscription
    customer = Stripe::Customer.retrieve(@user.stripeCustomerId)
    @plan = params[:plan]
    @user.update_subscription(:plan => @plan, :prorate => true)
    current_role = @user.roles.first.name
    @user.remove_role current_role
    current_user.add_role params[@plan]
  end

and lastly my edit view:

 <h2>Change My Subscription</h2>
  <h3>Your current plan is: <%= current_user.roles.first.name %>
  <%= select_tag @plan, options_for_select([['Subscriber'], ['Sustainer'], ['Supporter']]) %>
  <%= link_to "Update", change_subscription_path, :confirm => "You sure?", :plan => @plan %>

I'm attempting to send the new plan to the controller to update both the local role and the plan but it seems not to be able to find the proper route to do so. Not sure what i'm doing wrong in this regard.

Thanks for your help!

Was it helpful?

Solution

You need to perform a POST request to change_subscription_path, but you're requesting the page with a simple link_to so it's a GET request.

Add :method => :post in your link_to options:

<%= link_to "Update", change_subscription_path, :confirm => "You sure?", :method => :post, :plan => @plan %>

Alternatively, you can:

  • use a form instead of a link and submit it with the POST method

  • change the method for the changeSubscription action from POST to GET in routes.rb

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top