关系:表有许多用户。
我正在使用“包含”来与相关用户一起打印表详细信息,如下所示:
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/