我在Ruby中有一个名为Post的对象。 我想将帖子转换为json,但我也希望包含发布帖子的用户的姓名。事情是在post对象中不存在user_name,但是用户id是。
所以我真正想要的是这样的事情
{name:"My Post", body:"My post data", user_name:"jhonny"}
当我在Post对象上执行to_json时,我得到了
{name:"My Post", body:"My post data"}
但我也希望将user_name:"jhonny"
部分加入其中。我知道我可以使它成为哈希,然后在哈希上做to_json
,但我不想手动为所有post值设置哈希值,因为要发布许多属性。我宁愿使用哈希合并函数将附加属性添加到哈希,然后在其上调用json。
有没有办法为ruby类创建一个快速哈希对象?任何想法都会受到欢迎。
像
这样的东西my_post.hash.merge{:user_name => "jhonny"}.to_json
干杯。
答案 0 :(得分:4)
回答你的问题应该是这样的
my_post.attributes.merge{:user_name => "jhonny"}.to_json
无论如何,如果这不起作用,那么只需尝试以下解决方案之一:
将此添加到您的Post
型号:
def to_json
ActiveRecord::JSON.decode(super).merge({:user_name => user.user_name}).to_json
end
另一种解决方案是将user_name
方法添加到Post
模型中:
def user_name
user.user_name
end
然后使用to_json
,如下所示:
my_post.to_json(:methods => :username)
答案 1 :(得分:0)
如果您的Post模型是ActiveRecord模型,它接受:except,:include和:仅用于序列化方法的参数,包括#to_json。请参阅详细信息和示例here in the AR documentation。
基本上你需要像
这样的东西my_post.to_json(:include => { :user => { :only => :user_name } })