如何创建一个实际上是在移动中创建的数据库视图的Rails 5模型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (48)

对于每个标签,我想得到TagVisits和访问属性之和。

代码如下:

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

当我将生成的SQL粘贴到set_from_clause在我的POSTICO中,我看到了我想要的结果。TagVisitSumamry.all不会产生任何结果(也不会产生错误)。所以,我有点怀疑self.columns方法是正确的。这个例子在Rails 4中,我使用的是5。是否有一些变化需要我改变这种方法?

提问于
用户回答回答于

它有助于创建数据库视图和物化视图,你可以将它们用作ActiveRecord模型。

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    27 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 富有想象力的人

    2 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券