Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何基于检索到的字段计算字段并将其合并到rails中的JSON中_Ruby On Rails_Json - Fatal编程技术网

Ruby on rails 如何基于检索到的字段计算字段并将其合并到rails中的JSON中

Ruby on rails 如何基于检索到的字段计算字段并将其合并到rails中的JSON中,ruby-on-rails,json,Ruby On Rails,Json,我有一个控制器方法,它根据用户ID从一个表中检索所有数据。我想为该用户简单地添加该表中的两个整型字段,并将其作为返回的JSON的一部分。这就是我到目前为止所做的: def show @user = User.find(params[:id]) respond_to do |format| # Here we need to remove the layout because the request # is done via ajax and the l

我有一个控制器方法,它根据用户ID从一个表中检索所有数据。我想为该用户简单地添加该表中的两个整型字段,并将其作为返回的JSON的一部分。这就是我到目前为止所做的:

def show
     @user = User.find(params[:id])
    respond_to do |format|
      # Here we need to remove the layout because the request
      # is done via ajax and the layout is already loaded.

      format.json {  render json: @user.to_json } 
    end

我想要添加在一起以创建这个新字段的字段是“Score1”和“Score2”。我假设我必须执行类似@user.OverallScore=@user.Score1+@user.Score2的操作,您可以在
user
模型中定义一个实例方法
score\u sum

def score_sum
  self.Score1 + self.Score2
end

并在控制器中使用
@user.to_json(:methods=>[:score\u sum])

处理此问题的最短方法可能如下:

用户
模型中,添加一种方法:

class User
  def overall_score
    score1 + score2
  end
end
然后在控制器中,保留现有内容,并将最后一行更改为:

format.json {  render json: @user.as_json(methods: [:overall_score]) } 

此外,我建议将
用作_json
,并将哈希到json的转换留给呈现方法本身,除非您需要操作转换后的字符串本身,否则我同意您的编辑,只要您也更改了问题。即使风格是错误的,我也使用了塞巴斯蒂安使用的相同风格。这个
Score1+Score2
应该是
self.Score1+self.Score2
Mh?绝对不需要,在赋值过程中需要
self
,否则,只要先前没有使用相同名称赋值的局部变量,就可以使用不带
self
的字段。仅在分配期间使用
self
也是一种很好的约定。我不想要hollywar,而且知道你说的一切,在某些语言中使用名称约定可以使代码可读。我不确定,但如果某个列的camel case name
Score1
应该会引起关于
未初始化常量的错误,因此我将
self.
放进去以避免它。对不起,你肯定是在写,我以为你指的是在
self.score1
等上使用self,而不是在
self.score1