2012-07-15 79 views
4

控制器:传递参数来模拟

user = User.find(params[:id]) 
respond_with({:posts => @posts.as_json}) 

型号:

def as_json(options = {}) 
    { 
    name: self.name, 
    ... 
    } 
end 

我要像params[:id]通过parmeters到as_json功能更改JSON显示的东西。

我该怎么办?

回答

5

好,as_json确实需要一个选项哈希,所以我想你可以把它用

respond_with({:posts => @posts.as_json(:params => params)}) 

那么你可以参考PARAMS在as_json定义:

def as_json(options = {}) 
    params = options[:params] || {} 
    { 
    name: self.name, 
    params_id: params[:id] 
    ... 
    } 
end 
+0

不幸的是,我不认为这有效。 ActiveSupport(至少在rails4中)并没有将选项传递给ActiveModel as_json。看到这里:https://github.com/rails/rails/blob/3762ee0baa2285bdc4a76d4d492fbe34a10cdc3a/activesupport/lib/active_support/json/encoding.rb#L299 - 我很好奇,如果有另一种方法 – 2013-10-03 00:50:02

+0

对不起,让我澄清:这如果您在高级对象上调用to_json,并且嵌套的属性/对象将被序列化并因此也调用了as_json,则它将不起作用。 – 2013-10-03 01:06:06