使用:include返回JSON哈希中的模型方法

时间:2012-01-19 17:47:23

标签: ruby-on-rails ruby-on-rails-3 json activerecord include

我有一个非常简单的有效记录查询

def show
  user = User.find(params[:id])
  render :text => user.to_json(:include=>:classes)
end

但是,在我的Class模型中,我有一个方法

def self.get_avg_prev_score(id)
  return Scores.calc_score(id)
end

我试图在我的JSON哈希中返回avg_prev_score,但看到它不是数据库中的列,我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

如果您尝试返回您所包含的每个课程的平均分数,您可以这样做:

def show
  @user = User.find(params[:id])
  render :text => JSON::parse(@user.to_json(:include=>:classes)).merge("avg_prev_scores" => @user.get_avg_prev_scores_for_classes).to_json
end

然后让你的另一个方法返回与class_id

相关的所有分数的哈希值
# User.rb model
def get_avg_prev_scores_for_classes
  average_scores = []
  self.classes.each {|c| average_scores << [c.id, Scores.calc_score(c.id)]}
  return Hash[*average_scores.flatten]
end