Rails 3 - undefined method `model_name' for NilClass:Class when i try to render 'new' method
ruby, ruby-on-rails
Solution
Calling `render 'new'` doesn't call that controller method -- it only renders the template associated with that action. That is, your `create` action never sets `@order` -- maybe if you replace references to `order` with `@order` in your `create` action, that will fix things.
Problem
I want to keep values in forms when user create order (so if user have errors in fields then user would get page with params which he/she already printed). So i do next Controller ``` class OrdersController < ApplicationController ... def new @everpresent_field_placeholder = "Fill that" @order = Order.new end def create order = Order.new( params[:order] ) if order.save flash[:success] = "Yay! Order created!" else render 'new' flash[:error] = order.errors.full_messages.to_sentence :last_word_connector => ", ", :two_words_connector => ", " end end end ``` View for new order: ``` <legend>Order's creating</legend> <%= form_for @order, :html => {:class => "form-horizontal"} do |f| %> <%= field_set_tag do %> <div class="control-group"> <%= f.label :number_of_order, "Number of order", :class => "control-label" %> <div class="controls"> <%= f.text_field :number_of_order, :class => "span2", :placeholder => @everpresent_field_placeholder %> </div> </div> <%= f.submit "Create", :class => "btn btn-large btn-success" %> <% end %> <% end %> ``` But when i type something wrong in order's number and click "Create" i get such error: ``` NoMethodError in Orders#create Showing .../app/views/orders/new.html.erb where line #3 raised: undefined method `model_name' for NilClass:Class Extracted source (around line #3): 1: <legend>Order's creating</legend> 2: 3: <%= form_for @order, :html => {:class => "form-horizontal"} do |f| %> 4: <%= field_set_tag do %> 5: <div class="control-group"> 6: <%= f.label :number_of_order, "Number of order", :class => "control-label" %> ``` What do i do wrong?