【问题标题】:NoMethodError: undefined method `feed' for nil:NilClassNoMethodError:nil:NilClass 的未定义方法“feed”
【发布时间】:2015-06-04 02:05:07
【问题描述】:

我现在严格按照 Michael Hartl 编写的 Ruby on Rails 教程中的步骤进行操作,但我被困在第 11.3 章的清单 11.45 中 - 操作微帖子。当我在下一节 11.3.4-Destroying microposts 之前运行rake test 时,出现 5 个错误,原因类似。正如教程声称的那样,它应该是绿色的。我不明白为什么以及如何解决这个问题。 5 个错误之一是:

错误[“test_login_with_invalid_information”,UsersLoginTest,2015-05-31 06:10:56 -0400] test_login_with_invalid_information#UsersLoginTest (1433067056.81s) NoMethodError: NoMethodError: nil:NilClass 的未定义方法'feed' app/controllers/static_pages_controller.rb:4:in 'home' test/integration/users_login_test.rb:18:in 'block in class:UsersLoginTest'

在app/models/user.rb中,方法'feed'如下:

 def feed
  Micropost.where("user_id = ?", id)
end

在app/controllers/static_pages_controller.rb中,代码如下:

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

在 test/integration/users_login_test.rb 第 18 行:

test "login with invalid information" do
  get login_path
  assert_template 'sessions/new'
  post login_path, session: { email: "", password: "" }
  assert_template 'sessions/new'
  assert_not flash.empty?
  get root_path            <- line 18
  assert flash.empty?
end

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    错误发生在 root_path 页面上。

    current_user 未定义(为 nil),因此控制器中的方法调用 current_user.feed 失败。

    在代码中的某处,作为身份验证过程的一部分,需要设置 current_user 的值。根据经验,这通常在 application_controller.rb 中完成。

    您确定这些步骤不在教程中吗?

    【讨论】:

    • 教程中的第 8.2.2 节是讨论 current_user 的相关部分。
    • 当我注释掉feed_items = current_user.feed.paginate(page: params[:page])时,没有错误;因此我认为 current_user 很好;同样在本节之前,一切都通过了教程声称的测试。如果像你说的 current_user 没有设置, micropost = current_user.microposts.build 也会导致问题。
    • 我发现了问题。我忘了在该行中添加“如果已登录”。
    【解决方案2】:

    替换:

    @feed_items = current_user.feed.paginate(page: params[:page])
    

    与:

    @feed_items = current_user.feed.paginate(page: params[:page]) if logged_in?
    

    【讨论】:

      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多