关系:表有许多用户。

我正在使用“包含”来与相关用户一起打印表详细信息,如下所示:

Table.includes(:users)


但是,如果我为用户使用条件,例如,users.active为:

Table.includes(:users).where( :users => { active: true } )


我正在与活跃的用户一起获得表格。很好但是,如果表没有活动用户,则它返回空。
我需要的是即使没有活动用户也要打印表详细信息(在这种情况下,不包括用户部分)。即,如果有任何活动用户,则必须沿着表格进行打印,否则仅需要打印表格。
所以我在模型中写了一个过滤方法:

has_many :active_users, class_name: "User", :conditions => { active: 'yes'}


并且,在控制器中:Table.includes(:active_users)

现在,对于json响应:

render :json => { :table => @table.as_json(:include => :active_users) }


因此,密钥为“ active_users”。

但是我喜欢拥有作为“用户”的钥匙,而且我一直在寻找解决方案。任何人都可以建议溶胶。

TIA!

最佳答案

覆盖Table#as_json以包括用户

def as_json(opts={})
  super.merge(
    users: active_users.as_json(only: [:id, :username, ...]
  )
end


我建议将用户属性列入白名单,以确保您不暴露任何敏感信息。

关于mysql - 如何自定义json响应中的 key ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40601901/

10-10 23:13