我的测试失败,并显示ActionView :: Template :: Error:nil:NilClass错误的未定义方法“名称”?

用户名

导致此错误的原因是我的索引页中的代码是<%= pin.user.name %>

但是,当我将其更改为时<%= pin.user.name if pin.user %>,我的测试全部通过了。

相同的问题已经发布,但是没有可接受的解决方案,这就是我发布此问题的原因。

这是完整的错误消息:

ERROR["test_non-signed_in_user_layout_links", SiteLayoutTest, 1.3199719070007632]
 test_non-signed_in_user_layout_links#SiteLayoutTest (1.32s)
ActionView::Template::Error:         ActionView::Template::Error: undefined method `name' for nil:NilClass
            app/views/pins/_pin.html.erb:2:in `_app_views_pins__pin_html_erb___3167554587389080103_47088431630420'
            app/views/static_pages/home.html.erb:6:in `_app_views_static_pages_home_html_erb___4092361779176196837_47088431162360'
            test/integration/site_layout_test.rb:10:in `block in <class:SiteLayoutTest>'

ERROR["test_signed_in_user_layout_links", SiteLayoutTest, 2.0834625150000647]
 test_signed_in_user_layout_links#SiteLayoutTest (2.08s)
ActionView::Template::Error:         ActionView::Template::Error: undefined method `name' for nil:NilClass
            app/views/pins/_pin.html.erb:2:in `_app_views_pins__pin_html_erb___3167554587389080103_47088457226940'
            app/views/static_pages/home.html.erb:6:in `_app_views_static_pages_home_html_erb___4092361779176196837_47088457198480'
            test/integration/site_layout_test.rb:24:in `block in <class:SiteLayoutTest>'

ERROR["test_should_get_home", StaticPagesControllerTest, 2.1026109900003576]
 test_should_get_home#StaticPagesControllerTest (2.10s)
ActionView::Template::Error:         ActionView::Template::Error: undefined method `name' for nil:NilClass
            app/views/pins/_pin.html.erb:2:in `_app_views_pins__pin_html_erb___3167554587389080103_47088457310920'
            app/views/static_pages/home.html.erb:6:in `_app_views_static_pages_home_html_erb___4092361779176196837_47088457291840'
            test/controllers/static_pages_controller_test.rb:9:in `block in <class:StaticPagesControllerTest>'

这些是具有上述错误的测试:

site_layout_test.rb

require 'test_helper'

class SiteLayoutTest < ActionDispatch::IntegrationTest
  def setup
    ActionMailer::Base.deliveries.clear
    @user = users(:john)
  end

  test "non-signed in user layout links" do
    get root_path
    assert_template 'static_pages/home'
    assert_select "a[href=?]", root_path, count: 2
    assert_select "a[href=?]", about_path
    assert_select "a[href=?]", new_user_session_path, count: 2
    assert_select "a[href=?]", new_user_registration_path, count: 1
  end

  test "signed in user layout links" do
    get new_user_session_path
    assert_template 'devise/sessions/new'
    post user_session_path, params: { user: { email: @user.email, password: 'password' } }
    assert_not flash.empty?
    assert_redirected_to root_path
    follow_redirect!
    assert_template 'static_pages/home'
    assert_select "a[href=?]", new_user_session_path, count: 0
    assert_select "a[href=?]", new_user_registration_path, count: 0
    assert_select "a[href=?]", edit_user_registration_path
    assert_select "a[href=?]", destroy_user_session_path
    assert_select "a[href=?]", new_pin_path
  end
end

static_pages_controller_test.rb

require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
  def setup
    @user = users(:john)
  end

  test "should get home" do
    get root_url
    assert_response :success
    assert_select "title", full_title
  end

  test "should get about" do
    get about_url
    assert_response :success
    assert_select "title", full_title("About")
  end
end

这些是我的users.yml

john:
  name: John Rockefeller
  email: [email protected]
  encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
  created_at: <%= Time.zone.now %>

andrew:
  name: Andrew Carnegie
  email: [email protected]
  encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
  created_at: <%= Time.zone.now %>

pins.yml

quote:
  description: "Lorem quote"
  created_at: <%= 10.minutes.ago %>
  user: john

recipe:
  description: "Lorem recipe"
  created_at: <%= 3.years.ago %>

most_recent:
  description: "Lorem most recent"
  created_at: <%= Time.zone.now %>
尼克·施瓦德勒(Nick Schwaderer)

如果您binding.pry对该代码段投掷(假设您有撬动/再见),并pin.user在这种情况下键入,则应该说nil

你会得到当您尝试打电话给你目前得到的错误.namenil您的if语句为您节省的原因.name是ifpin.user为nil不会被调用

在Rails中非常方便的解决方法是将您的代码更改为:

<%= pin.user.try(:name) %>这不会引发错误,但只返回nil如果pin.userIS nil

或者-

如果您始终希望将用户连接到图钉,可以通过在创建图钉之前验证用户是否与该图钉相关联来防止无用户图钉的存在:

class Pin < ActiveRecord::Base

  validates :user, presence: true

end

希望这可以帮助!!:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ActionView :: Template :: Error(nil:NilClass的未定义方法“ city”):

来自分类Dev

ActionView :: Template :: Error(nil:NilClass的未定义方法“ each”):?

来自分类Dev

ActionView :: Template :: Error:nil:NilClass的未定义方法'split'

来自分类Dev

Ruby where子句返回nil对象?ActionView :: Template :: Error(nil:NilClass的未定义方法“ each”):

来自分类Dev

ActiveAdmin / Rspec-ActionView :: Template :: Error(nil:NilClass的未定义方法“ action_methods”)

来自分类Dev

ActionView :: Template :: Error:nil:NilClass的未定义方法'is_admin'

来自分类Dev

actionview :: template :: error(未定义的方法'html_safe'为nil:NilClass)

来自分类Dev

ActionView :: Template :: Error(nil:NilClass的未定义方法`page_param')

来自分类Dev

ActionView :: Template :: Error:nil:NilClass的未定义方法'is_admin'

来自分类Dev

actionview :: template :: error(nil:NilClass的未定义方法'html_safe')

来自分类Dev

耙子流产了!ActionView :: Template :: Error:nil:NilClass的未定义方法“挑战”

来自分类Dev

Heroku ActionView::Template::Error(nil:NilClass 的未定义方法`name')

来自分类Dev

测试抱怨NoMethodError:nil:NilClass的未定义方法“名称”

来自分类Dev

ActionView :: Template :: Error(未定义的方法“沉默”用于)

来自分类Dev

Ruby错误吗?导致ActionView :: Template :: Error-未定义的方法

来自分类Dev

失败/错误:获取:index NoMethodError:nil:NilClass的未定义方法“ <=”

来自分类Dev

远程运行Serverspec测试时出现“ nil:NilClass的未定义方法'[]'”错误

来自分类Dev

使用RSpec测试模型时,出现错误“ nil:NilClass的未定义方法'<'”。

来自分类Dev

rspec控制器测试错误nil:NilClass的未定义方法

来自分类Dev

“ NoMethodError:未定义的方法admin?for nil:NilClass“-测试错误

来自分类Dev

Heroku错误:ActionView :: Template :: Error(#<Message:0x007fc9df016930>的未定义方法'captcha')

来自分类Dev

如何更新我对rails的评论?错误:nil:NilClass的未定义方法“ permit”

来自分类Dev

我正在获取错误的未定义方法“空”?对于nil:NilClass

来自分类Dev

为什么我得到nil:NilClass的未定义方法“错误”?

来自分类Dev

获取错误红宝石-我的代码中nil:NilClass的未定义方法`+'

来自分类Dev

Rails RSpec测试:nil:NilClass的未定义方法“传递”

来自分类Dev

关联显示nil:NilClass的未定义方法`posts'

来自分类Dev

Rails 生成数字而不是名称,或者我为 nil:NilClass 得到未定义的方法“名称”

来自分类Dev

ActionView :: Template :: Error(未定义的方法...)在本地工作,但不适用于Heroku

Related 相关文章

  1. 1

    ActionView :: Template :: Error(nil:NilClass的未定义方法“ city”):

  2. 2

    ActionView :: Template :: Error(nil:NilClass的未定义方法“ each”):?

  3. 3

    ActionView :: Template :: Error:nil:NilClass的未定义方法'split'

  4. 4

    Ruby where子句返回nil对象?ActionView :: Template :: Error(nil:NilClass的未定义方法“ each”):

  5. 5

    ActiveAdmin / Rspec-ActionView :: Template :: Error(nil:NilClass的未定义方法“ action_methods”)

  6. 6

    ActionView :: Template :: Error:nil:NilClass的未定义方法'is_admin'

  7. 7

    actionview :: template :: error(未定义的方法'html_safe'为nil:NilClass)

  8. 8

    ActionView :: Template :: Error(nil:NilClass的未定义方法`page_param')

  9. 9

    ActionView :: Template :: Error:nil:NilClass的未定义方法'is_admin'

  10. 10

    actionview :: template :: error(nil:NilClass的未定义方法'html_safe')

  11. 11

    耙子流产了!ActionView :: Template :: Error:nil:NilClass的未定义方法“挑战”

  12. 12

    Heroku ActionView::Template::Error(nil:NilClass 的未定义方法`name')

  13. 13

    测试抱怨NoMethodError:nil:NilClass的未定义方法“名称”

  14. 14

    ActionView :: Template :: Error(未定义的方法“沉默”用于)

  15. 15

    Ruby错误吗?导致ActionView :: Template :: Error-未定义的方法

  16. 16

    失败/错误:获取:index NoMethodError:nil:NilClass的未定义方法“ <=”

  17. 17

    远程运行Serverspec测试时出现“ nil:NilClass的未定义方法'[]'”错误

  18. 18

    使用RSpec测试模型时,出现错误“ nil:NilClass的未定义方法'<'”。

  19. 19

    rspec控制器测试错误nil:NilClass的未定义方法

  20. 20

    “ NoMethodError:未定义的方法admin?for nil:NilClass“-测试错误

  21. 21

    Heroku错误:ActionView :: Template :: Error(#<Message:0x007fc9df016930>的未定义方法'captcha')

  22. 22

    如何更新我对rails的评论?错误:nil:NilClass的未定义方法“ permit”

  23. 23

    我正在获取错误的未定义方法“空”?对于nil:NilClass

  24. 24

    为什么我得到nil:NilClass的未定义方法“错误”?

  25. 25

    获取错误红宝石-我的代码中nil:NilClass的未定义方法`+'

  26. 26

    Rails RSpec测试:nil:NilClass的未定义方法“传递”

  27. 27

    关联显示nil:NilClass的未定义方法`posts'

  28. 28

    Rails 生成数字而不是名称,或者我为 nil:NilClass 得到未定义的方法“名称”

  29. 29

    ActionView :: Template :: Error(未定义的方法...)在本地工作,但不适用于Heroku

热门标签

归档