将根值添加到has_many_through关系的响应中

时间:2015-10-09 12:53:27

标签: ruby-on-rails active-model-serializers

我在rails app中有一个has_many关系。我的关联如下:

 class Car < ActiveRecord::Base
     has_many :car_fuel_types
     has_many :fuel_types , through: :car_fuel_types 
 end

class FuelType < ActiveRecord::Base
     has_many :car_fuel_types
     has_many :cars , through: :car_fuel_types
end

class CarFuelType < ActiveRecord::Base
    belongs_to :fuel_type
    belongs_to :car
end

在我的cars_controller中,我想让所有汽车都拥有特定的fuel_type,所以我在我的cars_controller索引动作中编写以下逻辑

def index    
    @cars = FuelType.find(params[:fuel_type_id]).cars
end

我正在使用此curl命令来测试结果

curl -i -H "Accept: application/json" -H "Content-type: application/json"  -X GET http://localhost:3000/cars.json\?fuel_type_id\=2

所以这给了我带有所选燃料类型的汽车列表。

现在我想将“car”添加到我正在获得的json响应中, 在尝试这样做时,我遇到了active_model_serializers gem并且读到我必须在我的控制器索引aciton中添加渲染块

所以我的新控制器看起来像:

def index    
    @cars = FuelType.find(params[:fuel_type_id]).cars
    respond_to do |format|
       format.html
       format.json { render json: @cars }
    end
end
母鸡我这样做并尝试相同的curl命令,它在渲染json:cars line中给我错误。

我得到的错误是:

 NoMethodError - undefined method `fuel_type_id' for #<Car:0x007f36ff104a18>:

任何人都可以告诉我应该怎么做才能在响应中获得根元素吗?

0 个答案:

没有答案