2011-02-14 55 views
9

我有一个拥有所有者方法的模型对象数组。这个方法需要一个参数传递给它才能工作。我需要将模型对象序列化为json并包含所有者方法的值。Rails to_json:有参数的方法

我会如何去传递参数为to_json方法我目前使用的

objects.to_json(:methods => :owner) 

包括所有者的方法,但因为我不是传递参数这是行不通的。

+0

你是如何使用JSON的?为什么你不能传递参数给#to_json? – 2011-02-28 04:45:15

回答

19

注意:评论应用到Rails 2.3,没有试过瓦特/ Rails的3

我不相信你可以做到这一点瓦特/ to_json的工作方式,所以我觉得你有两个选择:

1.通过调用一个方法来将正确的值存储在'owner'方法在to_json调用期间读取的变量中,从而准备对象。

2.Overriding as_json在你的模型:

def as_json(options = {}) 
    json = super(options) 
    json['owner'] = owner(options[:param_for_owner]) 
    json 
end 

然后在您的通话to_json只是传递:param_for_owner:

objects.to_json(:param_for_owner => 'foo') 

注意,如果你注入你的价值将取决于你的ActiveRecord :: Base.include_root_in_json已配置。

+4

这不完全美丽,但它的作品。 – 2011-08-09 15:32:08