2016-07-03 2 views
0

я последовал видео-учебник в Как построить Movie App Обзора в Rails 4.неопределенный метод `круглый» для ноля: NilClass

и я нашел эту проблему, , когда я пишу обзор без рейтинга этой проблемы происходит

this is the error (image)

enter image description here

C: \ рубин \ рельсы \ сайтов \ movie_review \ приложение \ контроллеры \ movies_controller.rb

def show 
    @reviews = Review.where(movie_id: @movie.id).order("created_at DESC") 

    if @reviews.blank? 
    @avg_review = 0 
     else 
     @avg_review = @movie.reviews.average(:rating).round(2) 
    end 
end 

я пытался это сделать, но это, кажется, что это не есть работа по

def show 
    @reviews = Review.where(movie_id: @movie.id).order("created_at DESC") 

    if @reviews.blank? 
    @avg_review = 0 
     elsif [email protected]? && @movie.rating.blank? 
     @avg_review = 0 
     else 
     @avg_review = @movie.reviews.average(:rating).round(2) 
    end 
    end 

пожалуйста находится в решении этой проблемы

+0

@ movie.reviews .average (: rating) - null b/c средний рейтинг - nil. Убедитесь, что рейтинг существует для фильма. –

+0

yep, когда я пишу обзор без рейтинга, нечего делить на 2, поэтому проблема возникает –

+0

'если я напишу отзыв без рейтинга, это значит, что [email protected]? = true @ movie.rating.blank? = true ему следует назначить @avg_review = 0 и прекратить там, почему он продолжается, и назначить @avg_review = @ movie.reviews.average (: rating) .round (2) ' –

ответ

0

пожалуйста, попробуйте этот

def show 
    @reviews = @movie.reviews.order("created_at DESC") 
    unless @reviews.present? 
    @avg_review = 0 
    else 
    @avg_review = @reviews.average(:rating).present? ? @reviews.average(:rating).round(2) : 0 
    end 
end 
+0

спасибо за помощь, теперь он отлично работает, но, пожалуйста, упростить это условие @avg_review = @ reviews.average (: rating) .present? ? @ reviews.average (: rating) .round (2): 0 –

+0

ya sure, его тернарное условие, когда первый оператор истинен, а затем запускает его сразу после? и если условие false, его оператор выполнения после ':' –

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