我是 Rails 的新手,任何帮助或建议将不胜感激
- 我正在尝试编写一个范围,显示评级等于或大于 4 的用户。我不确定为什么我的范围不起作用,您的帮助将不胜感激
用户.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
能否建议我如何正确将其编写为范围
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')