#ruby-on-rails #ruby #ruby-on-rails-3
#ruby-on-rails #ruby #ruby-on-rails-3
Вопрос:
В моей таблице у меня есть:
rating_score => The current score
ratings => The number of ratings which led to the score
Я хочу создать «поддельный» столбец с именем rating, который находится (rating_score / ratings) в модели. Который я могу использовать в своем контроллере для упорядочивания после и на мой взгляд.
Как я должен создать это в моей модели?
Комментарии:
1. Эти вещи называются
computed columns
илиcalculated columns
.
Ответ №1:
Обратите внимание, что вы не можете упорядочить результаты SQL-запроса по виртуальному атрибуту. Что вы можете сделать, это просто определить подобный метод в вашей модели:
def rating
rating_scope / ratings
end
и упорядочить свой результирующий набор в ruby на основе значения:
results.sort_by(amp;:rating)
Комментарии:
1. Если вам действительно нужно сохранить значение, создайте столбец для значения (как обычно), а затем в
before_save
фильтре в модели вычислите значение.2. В некоторых случаях мой столбец оценок равен 0. Это проблема?
3. @tzown: Вы не можете разделить на ноль, так что да, это будет проблемой. Просто проверьте этот случай (и любые другие!) внутри
rating
метода и верните значение по мере необходимости (например,ratings == 0 ? 0 : rating_scope / ratings
).