首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何创建一个Rails 5模型,它实际上是在旅途中创建的数据库视图?

如何创建一个Rails 5模型,它实际上是在旅途中创建的数据库视图?
EN

Stack Overflow用户
提问于 2018-07-22 20:14:46
回答 1查看 98关注 0票数 1

我正在读这篇文章:https://www.salsify.com/blog/engineering/eager-loading-calculations-database-views-in-rails

我真的很喜欢创建一个模型的概念,这个模型实际上是对另一个模型的查询,以便创建一些计算。

目前我想要做的很简单,对于每个标记,我希望获得TagVisits并对访问属性求和。

代码如下所示:

代码语言:javascript
复制
class TagVisitSummary < ApplicationRecord

  belongs_to :tag

  default_scope { set_from_clause }

  def ==(other)
    self.class == other.class && attributes == other.attributes
  end
  alias :eql? :==

  def hash
    attributes.hash
  end

  private

  def self.set_from_clause
    query = TagVisit.select(:tag_id).group(:tag_id).select('SUM(visits) as total_visits').all
    from("(#{query.to_sql}) AS #{table_name}")
  end

  def self.columns
    cols = [ActiveRecord::ConnectionAdapters::Column.new('tag_id', nil, :integer)]
    cols << ActiveRecord::ConnectionAdapters::Column.new("total_visits", nil, :integer)
    cols
  end

end

当我将set_from_clause中生成的SQL直接粘贴到我的Postico中时,我看到的正是我想要的结果。不幸的是,运行TagVisitSumamry.all不会产生任何结果(也不会产生错误)。因此,我对self.columns方法是否正确产生了一些疑问。示例是在Rails 4中,我使用的是5。是否有一些更改需要我更改此方法?

谢谢

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51465025

复制
相关文章

相似问题

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