我正在使用find my 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}
任何帮助?
答案 0 :(得分:1)
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
上可能存在的任何属性进行匹配。
答案 1 :(得分: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