2015-12-01 2 views
1

Это странно. Я прохожу через двенадцатую часть рубинового руководства по рельсам (для справки: https://www.railstutorial.org/book/following_users) и добрался до раздела 12.2.4 со всеми прохождением тестов. Затем я сделал команду rails generate controller Relationships и поступил именно код в листингах 12.30 и 12.31, чтобы попытаться получить тест отношения контроллера, чтобы пройти, но я получаю следующие ошибки:Неопределенный метод 'logged_in_user' для отношенийController в Ruby on Rails Учебник

ERROR["test_destroy_should_require_logged-in_user", RelationshipsControllerTest, 2015-11-13 11:07:25 +0000] 
test_destroy_should_require_logged-in_user#RelationshipsControllerTest (1447412845.16s) 
NoMethodError:   NoMethodError: undefined method `logged_in_user' for #<RelationshipsController:0x000000044f5bd8> 
      test/controllers/relationships_controller_test.rb:14:in `block (2 levels) in <class:RelationshipsControllerTest>' 
      test/controllers/relationships_controller_test.rb:13:in `block in <class:RelationshipsControllerTest>' 
     test/controllers/relationships_controller_test.rb:14:in `block (2 levels) in <class:RelationshipsControllerTest>' 
     test/controllers/relationships_controller_test.rb:13:in `block in <class:RelationshipsControllerTest>' 

ERROR["test_create_should_require_logged-in_user", RelationshipsControllerTest, 2015-11-13 11:07:25 +0000] 
test_create_should_require_logged-in_user#RelationshipsControllerTest (1447412845.22s) 
NoMethodError:   NoMethodError: undefined method `logged_in_user' for #<RelationshipsController:0x00000004db9990> 
      test/controllers/relationships_controller_test.rb:7:in `block (2 levels) in <class:RelationshipsControllerTest>' 
      test/controllers/relationships_controller_test.rb:6:in `block in <class:RelationshipsControllerTest>' 
     test/controllers/relationships_controller_test.rb:7:in `block (2 levels) in <class:RelationshipsControllerTest>' 
     test/controllers/relationships_controller_test.rb:6:in `block in <class:RelationshipsControllerTest>' 

Почему не видя logged_in_user из пользовательского контроллера? Я могу поставить его в качестве

class RelationshipsController < ApplicationController 
    before_action :logged_in_user 

    def create 
    user = User.find(params[:followed_id]) 
    current_user.follow(user) 
    redirect_to user 
    end 

    def destroy 
    user = Relationship.find(params[:id]).followed 
    current_user.unfollow(user) 
    redirect_to user 
    end 

    private 

    # Confirms a logged-in user. 
    def logged_in_user 
     unless logged_in? 
     store_location 
     flash[:danger] = "Please log in." 
     redirect_to login_url 
     end 
    end 
end 

и тест пройден, но этот вид нарушает Не повторяйте сам принцип твердили на протяжении всего урока. Любые идеи, что происходит не так?

+0

Вы можете разместить код контроллера, который не работает. Я не нашел фрагментов кода на странице, с которой вы связались. – lorefnon

ответ

2

Это метод logged_in_user на UsersController или в ApplicationsController? Если он находится в UsersController, у него не будет доступа к нему из-за иерархического наследования. Попробуйте поместить этот метод в ApplicationsController и затем дать ему завихрение.

Делать это даст как UsersController и RelationshipsController доступа к этому методу, потому что они оба унаследовать от ApplicationsController

+0

Я дважды проверю, когда вернусь домой, но это мой второй раз через учебник, и он работал в прошлый раз без проблем. Я изменил ситуацию, чтобы попытаться улучшить ситуацию с RoR. – mjswartz

+0

Виола! Он находится в ApplicationController в рабочей версии. Большое спасибо! – mjswartz

+0

: D Рад быть с нами! – richessler

Смежные вопросы