NoMethodError rails не смогли найти мой метод 'feed' - Rails Tutorial

Я следую руководству Rails и ему сказали набрать это в моем контроллере статических страниц:

def home
 if signed_in?
 @micropost = current_user.microposts.build
 @feed_items = current_user.feed.paginate(page: params[:page])
 end
end

Вот результат тестов RSpec:

Failures:

 1) Static Pages Home Page for signed in users should render user feed
 ←[31mFailure/Error:←[0m ←[31mvisit root_path←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x5ae7480>←[0m
←[36m # ./app/controllers/static_pages_controller.rb:6:in 'home'←[0m
←[36m # ./spec/requests/static_pages_spec.rb:29:in 'block (4 levels) in <top (required)="">'←[0m

 2) User
 ←[31mFailure/Error:←[0m ←[31mit { should respond_to(:feed) }←[0m
 ←[31mexpected #<user id:="" nil,="" name:="" "tim="" green",="" email:="" "[removed_email]",="" created_at:="" updated_at:="" password_digest:="" "$2a$04$5zt="" aqlxq5e6zt5du.ggmaes2qv9yplobdwjixxu8wkjn...",="" remember_token:="" admin:="" false=""> to respond to :feed←[0m
←[36m # ./spec/models/user_spec.rb:32:in 'block (2 levels) in <top (required)="">'←[0m

 3) User micropost associations status feed
 ←[31mFailure/Error:←[0m ←[31mits(:feed) { should_not include(unfollowed_post) }←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x5bb1c80>←[0m
←[36m # ./spec/models/user_spec.rb:173:in 'block (4 levels) in <top (required)="">'←[0m

 4) User micropost associations status feed
 ←[31mFailure/Error:←[0m ←[31mits(:feed) { should include(older_micropost) }←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x5bdfdd8>←[0m
←[36m # ./spec/models/user_spec.rb:172:in 'block (4 levels) in <top (required)="">'←[0m

 5) User micropost associations status feed
 ←[31mFailure/Error:←[0m ←[31mits(:feed) { should include(newer_micropost) }←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x5c6f718>←[0m
←[36m # ./spec/models/user_spec.rb:171:in 'block (4 levels) in <top (required)="">'←[0m

 6) Authentication authorization as wrong user visiting edit page for different user
 ←[31mFailure/Error:←[0m ←[31mbefore { visit edit_user_path(wrong_user) }←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x6149358>←[0m
←[36m # ./app/controllers/static_pages_controller.rb:6:in 'home'←[0m
←[36m # ./spec/requests/authentication_pages_spec.rb:110:in 'block (5 levels) in <top (required)="">'←[0m

 7) Micropost pages micropost creation with invalid information should not create a micropost
 ←[31mFailure/Error:←[0m ←[31mbefore { visit root_path }←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x61a3df0>←[0m
←[36m # ./app/controllers/static_pages_controller.rb:6:in 'home'←[0m
←[36m # ./spec/requests/micropost_pages_spec.rb:11:in 'block (3 levels) in <top (required)="">'←[0m

 8) Micropost pages micropost creation with invalid information error messages
 ←[31mFailure/Error:←[0m ←[31mbefore { visit root_path }←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x43aaba0>←[0m
←[36m # ./app/controllers/static_pages_controller.rb:6:in 'home'←[0m
←[36m # ./spec/requests/micropost_pages_spec.rb:11:in 'block (3 levels) in <top (required)="">'←[0m

 9) Micropost pages micropost creation with valid information should create a micropost
 ←[31mFailure/Error:←[0m ←[31mbefore { visit root_path }←[0m
 ←[31mNoMethodError:←[0m
 ←[31mundefined method 'feed' for #<user:0x5a73f50>←[0m
←[36m # ./app/controllers/static_pages_controller.rb:6:in 'home'←[0m
←[36m # ./spec/requests/micropost_pages_spec.rb:11:in 'block (3 levels) in <top (required)="">'←[0m

Finished in 7.74 seconds
←[31m114 examples, 9 failures←[0m
</top></user:0x5a73f50></top></user:0x43aaba0></top></user:0x61a3df0></top></user:0x6149358></top></user:0x5c6f718></top></user:0x5bdfdd8></top></user:0x5bb1c80></top></user></top></user:0x5ae7480>

В принципе, он возвращает NoMethodError для метода "feed", я понимаю ошибку, но я не могу найти, где определить этот метод и как это сделать, не имея в виду, что это вернет ленту новостей, любую помощь?

1 ответ

Ошибки дают вам подсказки. Вот этот:

undefined method 'feed' for #

показывает, что у вас есть экземпляр класса User, и код пытается найти метод экземпляра с именем feed на этом экземпляре User.

Там также проваливается тест, который проверяет это непосредственно:

expected #<user id:="" nil,="" name:="" "tim="" green",="" email:="" "[removed_email]",="" created_at:="" updated_at:="" password_digest:="" "$2a$04$5ztaqlxq5e6zt5du.ggmaes2qv9yplobdwjixxu8wkjn...",="" remember_token:="" admin:="" false=""> to respond to :feed
</user>

Это в user_spec.rb и явно указывает, что экземпляр пользователя должен отвечать на сообщение (что является другим способом сказать "вызов метода") с именем feed.

Это означает, что вам нужно перейти к вашему user.rb и добавить def feed и реализовать этот метод, чтобы вернуть то, что вы хотите вернуть.

licensed under cc by-sa 3.0 with attribution.