Неопределенный метод / NoMethodError в Rails 3 - PullRequest
2 голосов
/ 31 мая 2011

Когда я получаю доступ к http://localhost:3000/users,, это дает мне NoMethodError in Users#index. Ошибка выглядит следующим образом:

NoMethodError in Users#index

Showing /Applications/XAMPP/xamppfiles/htdocs/rails_projects/TUTORIALS/todo/app/views/users/index.html.erb where line #2 raised:

undefined method `name' for nil:NilClass
Extracted source (around line #2):

1: <% @users.each do |user| %>
2:   hello!! <%  @user.name %>
3: <% end %>
Rails.root: /Applications/XAMPP/xamppfiles/htdocs/rails_projects/TUTORIALS/todo

Application Trace | Framework Trace | Full Trace
app/views/users/index.html.erb:2:in `block in _app_views_users_index_html_erb___3451413751309771876_2169723860_4451603425222664605'
app/views/users/index.html.erb:1:in `each'
app/views/users/index.html.erb:1:in `_app_views_users_index_html_erb___3451413751309771876_2169723860_4451603425222664605'

Моя модель user.rb:

# Table name: users
#
#  id         :integer         not null, primary key
#  name       :string(255)
#  email      :string(255)
#  created_at :datetime
#  updated_at :datetime
#

class User < ActiveRecord::Base
  attr_accessible :name, :email

My view app / views / users / index.html.erb:

<% @users.each do |user| %>
  hello!! <%  @user.name %>
<% end %>

Приложение моего контроллера / controllers / users_controller.rb

class UsersController < ApplicationController

  def index
   @users = User.all  
  end

Мой файлways.rb содержит:

resources :users

Все мои тесты пройдены (с использованием rspec), включая тестовый пример в spec / controllers / users_controller_spec.rb:

describe "GET 'index'" do
     it "should be successful" do
       get 'index'
       response.should be_success
     end
end

Когда я получаю доступ к http://localhost:3000/users/1,, он отлично показывает мне пользователей. Коды в app / views / users / show.html.erb:

<p>
  <b>Name:</b>
  <%= @user.name %>
</p>

Я сделал rake db: test: prepare, и я думаю, что ошибка связана с db или миграциями. Любая идея? Спасибо!

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Разве это не должно быть:

<% @users.each do |user| %>
  hello!! <%  user.name %>
<% end %> 

user, а не @user?

1 голос
/ 31 мая 2011

Это неверно:

<% @users.each do |user| %>
  hello!! <%  @user.name %>
<% end %>

Это должно быть:

<% @users.each do |user| %>
  hello!! <%= user.name %>
<% end %>

В вашем коде объект @user не существует, поэтому вы получаете ошибку.В итерации каждый пользователь в @users помещается в объект user один за другим.

Другая ошибка в вашем коде заключается в том, что вы использовали <% @user.name %>.Это ничего не выводит.Если вы хотите вывести имя пользователя, вы должны использовать <%= user.name %> (обратите внимание на знак равенства).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...