0

I need to find out how to set up a form_for for nested routes so I can pass the stripe token in a hidden field. For the documentation I've read and looked at my form_for set up looks correct but I am getting this error on the line that begin the form_for:

    undefined method `membership_program_path' for #<#<Class:0x007fd4ef3da588>:0x007fd4f34ccf28>

here are my routes:

      resources :programs, except: [:show] do
      resources :memberships, only: [:new, :create]
      end

My Membership controller:

      def new
      @membership = Membership.new
      @program = Program.find(params[:program_id])
      end

Here is my entire _form.html.erb

     <%= form_for [@membership, @program] do |f| %>
     <%= f.hidden_field :stripe_card_token %>

     <div class="field">
     <%= f.label :email %>
     <%= f.text_field :email %>
     </div>

     <% if @members.stripe_card_token.present? %>
     Credit card has been provided.
     <% else %>
     <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>
   <% end %>
   <div id="stripe_error">
     <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript>
   </div>
   <%= f.submit %>
  <% end %>
Zippo9
  • 706
  • 2
  • 5
  • 24
  • Throw up your routes (rake routes) and show the particular section that is for this. I suspect it may be a relationship being a one to one and the resources vs a resource in your routes file. – Jason Brodie Apr 29 '15 at 18:59

1 Answers1

0

The reason for the error was because my resources are set up such that "memberships" is nested under "programs"; however, calling form_for(@membership, @program) is telling form_for that your program is nested under a membership. Hence, why it looks for membership_program_path, which doesn't exist. I reversed the order of the arguments passing to form_forand it works.

Zippo9
  • 706
  • 2
  • 5
  • 24
  • Sounds accurate, this would have been obvious when looking at the rake route as it would show membership_id/id stating that the membership needs to be the first object. – Jason Brodie Apr 29 '15 at 19:07