Ruby on Rails to_json问题:include

Eri*_*rik 10 json ruby-on-rails

我有以下代码

@asset = Asset.first(
  :include => [
    :asset_statuses => [
      :asset_status_name, 
      {:asset_location => [
        {:asset_floor => :asset_building}
      ]}
    ],
    :asset_type => [
      :asset_category => :asset_department
    ]
  ],
Run Code Online (Sandbox Code Playgroud)

(可能不是最好的数据库表设计,但这是我必须使用的)

Asset.first工作正常并正确带回的数据,但是当我尝试使用相同:includeto_json失败与以下错误方法:

@asset.to_json( 
  :include => [
    :asset_statuses => [
      :asset_status_name,
      {:asset_location => [
        {:asset_floor => :asset_building}
      ]}
    ],
    :asset_type => [
      :asset_category => :asset_department]
    ] 
)

NoMethodError (undefined method `macro' for nil:NilClass):
Run Code Online (Sandbox Code Playgroud)

to_json方法:include与find 具有相同的语法; 我不明白为什么它不起作用.

tfw*_*ght 23

如果其他人遇到我所做的奇怪的相关问题... to_json当您尝试包含未在模型上定义的关联时,也会返回此错误.


Mat*_*ght 8

我认为to_json:include语法有点不同.

我经常这样做

@asset.to_json(:include => { :asset_statuses => {
                             :include => :asset_status_name}})
Run Code Online (Sandbox Code Playgroud)

(从一个小的开始然后添加所有其他东西.烦人的架构!)


Mik*_*itt 7

尝试在单个to_json调用中混合第一和第二顺序关系时出现此错误.这是我原来的:

render :json => @reports.to_json(:include => 
   [:report_type, :organisation, :analysis => {:include => :upload}]
Run Code Online (Sandbox Code Playgroud)

它抛出了"未定义的方法`宏'为nil:NilClass"异常.

以下是我修复它的方法:

render :json => @reports.to_json(:include => 
   {:report_type => {}, :organisation => {}, 
    :analysis => {:include => {:upload => {}}}})
Run Code Online (Sandbox Code Playgroud)

Array适用于单阶关系,但对于二阶关系,包含对象需要是Hash.