我有房地产经纪人的评级系统。我有一个代理模型和一个agent_review模型。评级存储在agent_review表中,但我需要在代理模型下的视图中显示平均评等,并遇到一些问题。所有代码都张贴在下面,请提前感谢。
代理模型:
has_many :agent_reviewsagent_review模型:
belongs_to :agent代理视图:
<h3>Agent Rating: <%= @agent.agent_reviews.rating %> (<%= @agent.agent_reviews.count %>)</h3>代理控制器显示方法:
def show
@agent_reviews = AgentReview.all
@agent = Agent.find_by_slug(params[:id]) || Agent.find(params[:id])
if @agent.private_profile? && !current_agent&.super_admin?
redirect_to root_path, notice: "That user has a private profile"
else
@favorite_listings = @agent.liked_listings.available.includes(:neighborhood)
@agent_listings = @agent.sales_agent_listings.available.visible
@mate_posts = @agent.liked_mates.order(:when)
respond_to do |format|
format.html
format.json { render json: @agent }
end
end
end错误:

发布于 2016-09-16 17:03:52
@agent.agent_reviews是一个活动记录关系--因为它不仅仅是一个agent_review对象(它的复数应该告诉你这一点),所以它没有“评级”。
因此,如果代理有6个评论,评级从1到5不等,您想要显示这些评论的平均值。您需要在agent.rb模型文件中添加以下内容:
def average_rating
if self.agent_reviews.any?
sum = 0
self.agent_reviews.each do |agent_review|
sum += agent_review.rating
end
return sum/self.agent_reviews.count
else
return nil # agent has no reviews, don't divide by zero!
end
end(这比它所需要的要详细得多,您可以使用一些SQL魔术来压缩它)
并参考你认为的新方法:
<h3>Agent Rating: <%= @agent.average_rating %> (<%= @agent.agent_reviews.count %>)</h3>发布于 2016-09-16 17:26:16
加上Jhon的答案,你可以在一个短模式下这样做。如下所示:
def average_rating
agent_reviews = self.agent_reviews
agent_reviews.any? ? (agent_reviews.map(&:rating).sum / agent_reviews.count) : nil
endhttps://stackoverflow.com/questions/39536591
复制相似问题