Domanda

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

È stato utile?

Soluzione

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top