我正在尝试将模型对象数组编码为JSON,包括通过关联相关的数据。但我的架构中的外键字段不是modelname_id,所以我不能简单地做ActiveSupport :: JSON.encode(xxx,:include => {:modelname})。这种架构差异的原因是我认为应该是常见的。所以可能有一个既定的最佳实践,但我不知道。
相关迁移文件:
def self.up
create_table :tables do |t|
t.integer :room_id
t.integer :table_num
t.integer :user_1_id
t.integer :user_2_id
t.timestamps
end
end
由于每个表可以让两个用户坐下来,我不能简单地使用user_id,但必须使用user_1_id和user_2_id
现在,假设我有一个我要编码为json的表数组,以及它我希望每个表对象都包含user_1_email:'xxx'和user_2_email:'xxx'字段。我怎么能这样做?
另外,当我在各种在线文档中搜索ActiveSupport :: JSON.encode时,我找不到任何关于我可以用选项做什么的文章。
例如,api in http://api.rubyonrails.org/ 只告诉我默认选项参数是nil,但没有说明我可以使用哪些选项。我错过了什么吗?
另外,我还可以在JSON编码中添加非模型属性吗? 我一直在寻找一种方法,但找不到任何东西。
答案 0 :(得分:2)
您可以通过实现自定义#as_json
方法轻松自定义和扩展对象的JSON表示。
示例:
class Table
def as_json(options = nil) # This is just for interface compatibility
{
:id => @id,
:user_1_email => @user1.email,
:user_2_email => @user2.email,
:something_else => generate_something
}
end
end