我正在尝试传递一个对象(当前用户),以便在渲染集合的json时使用。
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @items }
format.json { render :json => @items.to_a.as_json(:user => current_user) }
end
但是,这似乎没有效果,因为as_json方法中的选项[:user]为nil。
JSON_ATTRS = ['id', 'created_at', 'title', 'content']
def as_json(options={})
# options[:user] is nil!
attributes.slice(*JSON_ATTRS).merge(:viewed => viewed_by?(options[:user]))
end
任何人都知道为什么这不起作用,或者可以建议一种更优雅的方式让json渲染器知道当前用户?
谢谢, 卫
答案 0 :(得分:1)
你在一个数组(@items.to_a
)上调用as_json,你确定这是你想要的吗?
如果您尝试在模型上调用它,则需要执行类似@items.to_a.map{|i| i.to_json(:user => current_user)}
的操作(并且您可能不需要to_a
)。
你应该打to_json
。它会调用as_json获取你的属性,传递你提供的任何选项,但返回一个正确格式化的json-string(as_json
返回一个ruby对象)。
答案 1 :(得分:0)
def as_json(options={})
{
:field1 => self.field1,
:field2 => self.field2,
:details => self.details.map{|d| d.to_json(options)}
}
end