Ruby on rails NoMethodError在Rails 4中使用两个型号
我有房地产经纪人的评级系统。我有一个代理模型和一个代理审查模型。评级存储在agent_review表中,但我需要在agent模型下的视图中显示平均评级,我遇到了一些问题。所有代码都张贴在下面,请提前感谢您 代理模型:Ruby on rails NoMethodError在Rails 4中使用两个型号,ruby-on-rails,activerecord,model-view-controller,nomethoderror,Ruby On Rails,Activerecord,Model View Controller,Nomethoderror,我有房地产经纪人的评级系统。我有一个代理模型和一个代理审查模型。评级存储在agent_review表中,但我需要在agent模型下的视图中显示平均评级,我遇到了一些问题。所有代码都张贴在下面,请提前感谢您 代理模型: has_many :agent_reviews 代理审查模式: belongs_to :agent 代理视图: <h3>Agent Rating: <%= @agent.agent_reviews.rating %> (<%= @agent.age
has_many :agent_reviews
代理审查模式:
belongs_to :agent
代理视图:
<h3>Agent Rating: <%= @agent.agent_reviews.rating %> (<%= @agent.agent_reviews.count %>)</h3>
错误:
@agent.agent\u reviews
是一种活动记录关系-没有“评级”,因为它不止一个agent\u 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>
代理评级:()
@agent.agent\u reviews
是一种活动记录关系-没有“评级”,因为它不止一个agent\u 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>
代理评级:()
添加到Jhon Feltz答案中,您可以在短模式下完成此操作。像这样:
def average_rating
agent_reviews = self.agent_reviews
agent_reviews.any? ? (agent_reviews.map(&:rating).sum / agent_reviews.count) : nil
end
除了Jhon Feltz的答案之外,您还可以在短时间内完成此操作。像这样:
def average_rating
agent_reviews = self.agent_reviews
agent_reviews.any? ? (agent_reviews.map(&:rating).sum / agent_reviews.count) : nil
end
显示终端的完整错误日志显示终端的完整错误日志