Question

I have an error that I can't solve. I follow steps in the tutorial, and I can't pass my tests to green.

I have got this error :

$ bundle exec rspec spec/requests/user_pages_spec.rb -e "Edit page"

Run options: include {:full_description=>/Edit\ page/}
FFF

Failures:

  1) User pages Edit page
     Failure/Error: before { visit edit_user_path(user) }
     ActionView::Template::Error:
       undefined method `model_name' for NilClass:Class
     # ./app/views/users/edit.html.erb:6:in `_app_views_users_edit_html_erb__878999397_98066850'
     # ./spec/requests/user_pages_spec.rb:49:in `block (3 levels) in <top (required)>'

  2) User pages Edit page
     Failure/Error: before { visit edit_user_path(user) }
     ActionView::Template::Error:
       undefined method `model_name' for NilClass:Class
     # ./app/views/users/edit.html.erb:6:in `_app_views_users_edit_html_erb__878999397_98066850'
     # ./spec/requests/user_pages_spec.rb:49:in `block (3 levels) in <top (required)>'

  3) User pages Edit page
     Failure/Error: before { visit edit_user_path(user) }
     ActionView::Template::Error:
       undefined method `model_name' for NilClass:Class
     # ./app/views/users/edit.html.erb:6:in `_app_views_users_edit_html_erb__878999397_98066850'
     # ./spec/requests/user_pages_spec.rb:49:in `block (3 levels) in <top (required)>'

Finished in 0.37836 seconds
3 examples, 3 failures

Failed examples:

rspec ./spec/requests/user_pages_spec.rb:52 # User pages Edit page
rspec ./spec/requests/user_pages_spec.rb:54 # User pages Edit page
rspec ./spec/requests/user_pages_spec.rb:53 # User pages Edit page

Do I have something missing in my route.rb file ? I don't understand what to do.

edit.html.erb

<% provide(:title, "Editer") %>
<h1>Mise a jour du profil</h1>

<div class="row">
    <div class="span6 offset3">
      <%= form_for(@user) do |f| %>
        <%= render 'shared/error_messages' %>

        <%= f.label :name %>
        <%= f.text_field :name %>

        <%= f.label :email %>
        <%= f.text_field :email %>

        <%= f.label :password %>
        <%= f.password_field :password %>

        <%= f.label :password_confirmation, "Confirm Password" %>
        <%= f.password_field :password_confirmation %>

        <%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
      <% end %>

      <%= gravatar_for @user %>
      <a href="http://gravatar.com/emails">changer</a>
    </div>
</div>

users_controller.rb

class UsersController < ApplicationController

def show   
    @user = User.find(params[:id])
end

def new
    @user = User.new
end

def create
    @user = User.new(params[:user])  
    if @user.save
        sign_in @user
        flash[:success] = "Bienvenue sur mon site"
        redirect_to @user
    else
        render 'new'
    end
end

private 
    def user_params
        params.require(:user).permit(:name, :email, :password, :password_confirmation)
    end

def edit
    @user = User.find(params[:id])
end

end

user_pages_spec.rb

describe "Edit" do
        let(:user) { FactoryGirl.create(:user) }
        before { visit edit_user_path(user) }

        describe "page" do
            it { should have_content("Mise a jour du profil") }
            it { should have_title("Editer") }
            it { should have_link("changer",  href: 'http://gravatar.com/emails') }
        end

        describe "Avec info invalide" do
            before { click_button "Sauver" }
            it { should have_content('erreur') }
        end
    end

routes.rb

  root to: 'static_pages#home'
  match '/help',    to: 'static_pages#help'
  match '/about',   to: 'static_pages#about'
  match '/contact', to: 'static_pages#contact'

  # views/users
  resources :users
  match '/signup', to: 'users#new'

  # views/sessions
  resources :sessions, only: [:new, :create, :destroy]
  match '/signin',  to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete

And when I run in my navigator the adresse : /users/1/edit

There is an error :

NoMethodError in Users#edit

Showing /home/tprails/RubyOnRails/new_app/app/views/users/edit.html.erb where line #6 raised:

undefined method `model_name' for NilClass:Class
Extracted source (around line #6):

3: 
4: <div class="row">
5:     <div class="span6 offset3">
6:       <%= form_for(@user) do |f| %>
7:         <%= render 'shared/error_messages' %>
8: 
9:         <%= f.label :name %>

Do I have something missing in my route.rb file ? I don't understand what to do.

Thanks for help, and sorry for my bad english

Was it helpful?

Solution

Your edit method is in your private block, move it above the private and it should work.

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