1

我正在查看 show.html.erb

 <%= @question.user.lesson_id %>

这是浏览器上的一个数字。

我的 questions_controller.rb 是

 def show
    @question = Question.find(params[:id])
    @comments = @question.comments.all
    if user_signed_in?
            @rating_currentuser = @question.ratings.find_by_user_id(current_user.id)
            unless @rating_currentuser
            @rating_currentuser = current_user.ratings.new
   end
 end

和我的 questions_controller_test.rb

   test "should show question signed in" do
    sign_in users(:user2)
    get :show, :id => @question_user1.to_param
    assert_response :success
   end

一切正常(浏览器和测试)

当改变视图 show.html.erb

   <%= @question.user.lesson.name %>

我对浏览器没问题,但测试失败

   ActionView::Template::Error: undefined method `name' for nil:NilClass.

我试试这个

  @name = Lesson.find(params[:id])

在 questions_controller.rb 然后测试失败

  Expected response to be a <:success>, but was <302>

此处此处的类似问题

4

2 回答 2

2

使用 try 可能会掩盖潜在的问题。

例如,当我遇到这个错误时,这是​​因为我没有在没有修复正确的外键引用的情况下创建模型对象——视图是使用带有名称属性的 FK 关联呈现的——例如 Product.ProductType.name。如果我曾经尝试解决它,它会在我的测试中掩盖这个错误,这在测试中是不受欢迎的。一旦我添加了正确的引用,一切都会正常工作,不需要 try(:name)。

于 2012-09-29T14:47:58.617 回答
1

这个答案的解决方案

是使用 try 方法并将视图更改为

<%= @question.user.lesson.try(:name) %>
于 2012-06-01T16:23:28.913 回答