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])

question_controller.rb で、テストは失敗します

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

ここここ 同様の質問

4

2 に答える 2

2

try を使用すると、根本的な問題を潜在的に隠すことができます。

たとえば、このエラーが発生したのは、正しい外部キー参照を修正せずにモデル オブジェクトを作成していなかったことが原因でした。ビューは、name 属性との FK 関連付けを使用してレンダリングしていました。回避策を使用していた場合、テストでこの障害が隠され、テストでは望ましくなかったでしょう。正しい参照を追加すると、try(:name) を必要とせずにすべてが正常に機能しました。

于 2012-09-29T14:47:58.617 に答える
1

この回答からの解決策

tryメソッドを使用し、ビューを次のように変更します

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