ruby on rails - Subscription form with Stripe not passing parameters properly -


i getting following error on rails 4.2 application. i'm trying setup subscriptions stripe. subscription belongs business , has_one plan.

on view pass params in url: http://localhost:3000/subscriptions/new?plan_id=2&business_id=1001

after submit form error below , code follows. forgive me if beginner question.

nameerror

subscriptions controller

class subscriptionscontroller < applicationcontroller   before_action :set_subscription, only: [:show, :edit, :update, :destroy]    # /subscriptions   def index     @subscriptions = subscription.all   end    # /subscriptions/1   def show   end    # /subscriptions/new   def new     @subscription = subscription.new     @plan = plan.find_by id: params["plan_id"]     @business = business.find_by id: params["business_id"]   end    # post /subscriptions   def create     @subscription = subscription.new subscription_params.merge(email: stripe_params["stripeemail"],                                                                card_token: stripe_params["stripetoken"])     raise "please, check subscription errors" unless @subscription.valid?     @subscription.process_payment     @subscription.save     redirect_to @subscription, notice: 'subscription created.'   rescue => e     flash[:error] = e.message     render :new   end    private     def stripe_params       params.permit :stripeemail, :stripetoken     end     # use callbacks share common setup or constraints between actions.     def set_subscription       @subscription = subscription.find(params[:id])     end      # never trust parameters scary internet, allow white list through.     def subscription_params       params.require(:subscription).permit(:plan_id, :business_id)     end end 

subscription model

class subscription < activerecord::base    belongs_to :business   has_one :plan    def process_payment     customer = stripe::customer.create email: email,                                        card: card_token      stripe::charge.create customer: customer.id,                           amount: plan.price * 100,                           description: plan.name,                           currency: 'usd'    end  end 

subscription view (new.html.erb)

<%= form_for @subscription |f| %>   <% if @subscription.errors.any? %>     <div id="error_explanation">       <h2>         <%= pluralize(@subscription.errors.count, "error") %>         prohibited subscription being saved:       </h2>       <ul>         <% @subscription.errors.full_messages.each |message| %>           <li>             <%= message %>           </li>         <% end %>       </ul>     </div>   <% end %>   <h1><%= @business.name %></h1>   <div class="field">     <%= f.hidden_field :plan_id, value: @plan.id %>   </div>   <div class="field">     <%= f.hidden_field :business_id, value: @business.id %>   </div>   <div class="actions">     <script       src="https://checkout.stripe.com/checkout.js" class="stripe-button"       data-key="<%= rails.application.secrets.stripe_publishable_key %>"       data-image="/img/documentation/checkout/marketplace.png"       data-name="business name"       data-description="<%= @plan.name %>"       data-amount="<%= @plan.price*100 %>">     </script>   </div> <% end %> 

plan model

class plan < activerecord::base    belongs_to :subscription  end 

calling render loads view action, doesn't run of logic in method behind action, why there no @plan available when render :new create action.


Comments