3

我正在使用查找我的 sql,我想在数据库中计算一些东西并添加到我的模型中。

我会尽量简化代码

class User < ActiveRecord::Base
   attr_accessor :comments_count

end

在其他地方:

@users = User.find_by_sql("select * (select count(*) from comments where user_id=u.id) as comments_count from Users u")


@user.map{|u| puts u.comments_count}

有什么帮助吗?

4

2 回答 2

1

好,我知道了。它与 attr_accessor 无关。我不得不删除它。

@users = User.find_by_sql("select * (select count(*) from comments where user_id=u.id) as comments_count from Users u")

@user.map do |u|
  puts u.comments_count if @user.has_attribute?(:comments_count)
end
于 2013-02-15T22:16:50.800 回答
1

不幸的是,ActiveRecord 不仅将任何选定的列与模型上的属性匹配。但是,类似的东西可能很容易组合在一起。首先你需要重载find_by_sql到这样的东西 -

def self.find_by_sql(sql)
    values = connection.select_all(sql)

    objects = []

    values.each do |row|
        objects << self.new(row)
    end

    objects
end

然后,您的模型的初始化函数可以批量分配基于模式的属性,然后处理分配您的自定义属性。它不像您可能希望的那样干净或简单,但它应该可以完成任务。您可能可以编写初始化函数,使其相当通用,因为它可以批量分配所有基于模式的属性,然后将传入的剩余键与可能存在的任何属性匹配self

于 2013-02-15T21:34:49.187 回答