乘以关联to_json

时间:2015-05-20 09:09:59

标签: ruby-on-rails ruby-on-rails-4 activerecord

我正在处理这段代码:

render json: User.find(params[:id]).to_json(
      :include => 
      {
        :user_quests => { :inlcude => { :quest }, :only => { :id } }, 
        :user_skills 
      },
      :except => 
      { 
        :authentication_token, 
        :email 
      }
  )

结果为SyntaxError。我目前唯一的工作代码是:

render json: User.find(params[:id]).to_json(
      :include => 
      [
        :user_quests, 
        :user_skills 
      ],
      :except => 
      [ 
        :authentication_token, 
        :email 
      ]
  )

但我需要将更多参数传递给只有一个关联来执行嵌套include。应该以与工作代码中相同的方式获取另一个(:user_skills)。我该怎么做?

2 个答案:

答案 0 :(得分:1)

此代码导致语法错误,因为您没有正确使用集合。数组([])是值列表,而散列映射(或简称散列,{})需要键值对。

to_json的上下文中有一组关联:

[
  :user_quests, 
  :user_skills
]

...大致相当于映射到空选项哈希的关联哈希:

{
  :user_quests => {}, 
  :user_skills => {}
}

执行完转换后,您可以根据需要有选择地添加选项。

答案 1 :(得分:0)

这是适合我的解决方案,与Rails 4兼容:

render json: User.find(params[:id]).as_json(
      include: 
      { 
        user_quests: 
        { 
          include:  
          { 
            quest: 
            {
              only: :_id 
            }
          }
        },
        user_skills:
        {

        }
        },
      except: [:authentication_token, :email]
  )