【发布时间】:2011-03-20 01:06:31
【问题描述】:
我正在尝试创建一个独特的 json 数据结构,但遇到了一个我似乎无法弄清楚的问题。
在我的控制器中,我正在做:
favorite_ids = Favorites.all.map(&:photo_id)
data = { :albums => PhotoAlbum.all.to_json,
:photos => Photo.all.to_json(:favorite => lambda {|photo| favorite_ids.include?(photo.id)}) }
render :json => data
在我的模型中:
def as_json(options = {})
{ :name => self.name,
:favorite => options[:favorite].is_a?(Proc) ? options[:favorite].call(self) : options[:favorite] }
end
问题是,rails 将“照片”和“专辑”的值(在我的数据哈希中)编码为 JSON 两次,这会破坏一切......我可以让它工作的唯一方法是如果我调用 ' as_json' 而不是 'to_json':
data = { :albums => PhotoAlbum.all.as_json,
:photos => Photo.all.as_json(:favorite => lambda {|photo| favorite_ids.include?(photo.id)}) }
但是,当我这样做时,我的 :favorite => lambda 选项不再使其成为模型的 as_json 方法......所以,我要么需要一种方法来告诉 'render :json'不要对哈希值进行编码,这样我就可以自己对值使用“to_json”,或者我需要一种方法来让传递给“as_json”的参数真正显示在那里......
我希望这里有人可以提供帮助...谢谢!
【问题讨论】:
标签: ruby-on-rails ruby json