Ruby on rails Rails—向JSON响应添加字段

Ruby on rails Rails—向JSON响应添加字段,ruby-on-rails,json,Ruby On Rails,Json,我需要在JSON响应中添加一个字段 def index if params[:competition_level] @competition_level_id = params[:competition_level].to_i end @matchups = @weekly_scoreboards # can I call @matchups[0].as_json to return a hash, and add a field? # let'

我需要在JSON响应中添加一个字段

def index
    if params[:competition_level]
      @competition_level_id = params[:competition_level].to_i
    end

   @matchups = @weekly_scoreboards

   # can I call @matchups[0].as_json to return a hash, and add a field?
   # let's see...

   @matchups[0].as_json.merge!({ 'disabled' => true} )

   # this returns @matchups[0] looking the way I need it to,
   # but it I look at @matchups[0].as_json again, the field I added is 
   # gone

   respond_to do |format|
      format.html { render }
      format.mobile { render }
      format.json {
          render :json => @matchups.to_json
      }
   end
end  
不知道这里发生了什么。我们已经讨论了几个小时了。

试试这个

object.to_json(方法:[:disable])

在model.rb中

def disable
  true
end

如果需要添加额外字段,则必须执行以下操作:

respond|to do |格式|
#其他格式
format.json do
json=@matchups[0]。作为_json
json[0]['disabled']=true
呈现json:json
结束
结束
此代码段适用于上述情况。如果您有更复杂的情况,请将所有逻辑移到一个额外的服务中。例如:

respond|to do |格式|
#其他格式
format.json do
render json:MatchupSerializer.to_json(@matchups)
结束
结束
#app/services/matcheup_serializer.rb
模块匹配串行化器
延伸自我
def到_json(列表)
结果=list.as_json
结果[0]['disabled']=true
#其余的修改
结果
结束
结束

将此代码的输出张贴到您可以使用的位置。如果我没有错的话,默认情况下是使用rails的。我猜测(这只是猜测)您正在尝试将rails代码合并到json代码。尝试在{'disabled'=>true}对象上调用.to_json,或者在合并对象后在整个对象上调用as_json。