0
给定两个模型和控制器:Rails的as_json有两个不相关的模型
苹果
class Apples < ActiveRecord::Base
belongs_to :not_oranges
...
def as_json(options={})
opts = {:include => [:not_oranges]}
super(options.reverse_merge! opts)
end
end
橙子
class Oranges < ActiveRecord::Base
belongs_to :not_apples
...
def as_json(options={})
opts = {:include => [:not_apples]}
super(options.reverse_merge! opts)
end
end
搜索控制器
class SearchController < ApplicationController
a = Apples.search params[:q]
o - Oranges.search params[:q]
@results = {
:apples => a,
:oranges => o
}
respond_to do |format|
format.json { render :json => @results }
end
正如您所看到的,这两个模型完全不相关,并且两个模型的as_json
定义中的:include
选项都不相同。
所有工作正常,如果搜索查询只命中苹果或只打橘子,但一旦这两个对象是不是空的,我得到:
undefined method `not_apples' for #<Oranges:0x00000004af8cd8>
看起来或者是两个as_json
定义被合并,或者Oranges.as_json
正在被覆盖Apples.as_json
。
这是预期的行为?没有使用类似RABL的东西有没有干净的方法?我觉得这对我的需求来说会过度。
教我假设红宝石是因为它的高水平传递值!谢谢。 – Roganartu 2012-07-13 08:26:17