首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rails 4中使用两个模型的NoMethodError

在Rails 4中使用两个模型的NoMethodError
EN

Stack Overflow用户
提问于 2016-09-16 16:53:22
回答 2查看 47关注 0票数 0

我有房地产经纪人的评级系统。我有一个代理模型和一个agent_review模型。评级存储在agent_review表中,但我需要在代理模型下的视图中显示平均评等,并遇到一些问题。所有代码都张贴在下面,请提前感谢。

代理模型:

代码语言:javascript
复制
has_many :agent_reviews

agent_review模型:

代码语言:javascript
复制
belongs_to :agent

代理视图:

代码语言:javascript
复制
<h3>Agent Rating: <%= @agent.agent_reviews.rating %> (<%= @agent.agent_reviews.count %>)</h3>

代理控制器显示方法:

代码语言:javascript
复制
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

错误:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-16 17:03:52

@agent.agent_reviews是一个活动记录关系--因为它不仅仅是一个agent_review对象(它的复数应该告诉你这一点),所以它没有“评级”。

因此,如果代理有6个评论,评级从1到5不等,您想要显示这些评论的平均值。您需要在agent.rb模型文件中添加以下内容:

代码语言:javascript
复制
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魔术来压缩它)

并参考你认为的新方法:

代码语言:javascript
复制
<h3>Agent Rating: <%= @agent.average_rating %> (<%= @agent.agent_reviews.count %>)</h3>
票数 1
EN

Stack Overflow用户

发布于 2016-09-16 17:26:16

加上Jhon的答案,你可以在一个短模式下这样做。如下所示:

代码语言:javascript
复制
def average_rating
    agent_reviews = self.agent_reviews
    agent_reviews.any? ? (agent_reviews.map(&:rating).sum / agent_reviews.count) : nil
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39536591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档