Rails должен создать «поддельный» столбец в модели

#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 ).