我是rails的新手,非常感谢任何帮助或建议
user.rb
scope :ratings_equal_and_greater_than_4, where('average_rating_final_score >= 4')
def average_rating_final_score
if self.average_rating_score == 1.0
1
elsif self.average_rating_score == 2.0
2
elsif self.average_rating_score == 3.0
3
elsif self.average_rating_score == 4.0
4
elsif self.average_rating_score == 5.0
5
else
self.average_rating_score
end
end
def average_rating_score
ratings_total.to_f / ratings_count
end
当这样编写时,范围很有效:
<% if user.average_rating_final_score >= 4 %>
# display users with ratings equal to or greater than 4 star
<% end %>
但我想在我的观点中写出类似的东西
@users.ratings_equal_and_greater_than_4
有人可以建议我如何正确地写这个作为范围
答案 0 :(得分:2)
Rails范围是AREL - 一种ruby包装的sql。 这意味着你不能像这样从SQL WHERE语句中调用ruby代码:
where('average_rating_final_score >= 4')
但您可以定义可以按需使用的类方法:
def self.ratings_equal_and_greater_than_4
all.reject{ |record| record.average_rating_final_score < 4 }
end
您也可以编写propper SQL查询:
where('(`table_name.ratings_total` / `table_name.ratings_count`) >= 4')