2015-10-08 124 views
0

我有一個的has_many通過在我的Rails應用程序和關係,及其相關的如下:活動記錄的查詢進行了許多通過關係

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 

在我的應用程序的用戶選擇fuel_type和所選fuel_type的基礎上,我必須過濾汽車。

因此,在汽車控制器中,我有fuel_type_id作爲參數傳遞給用戶,現在我需要選擇與該fuel_type相對應的汽車。

任何人都可以幫我寫活動記錄查詢來做到這一點嗎?

編輯1:

結合下面的答案,

我用我的車控制器的索引動作下面的代碼:

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

respond_to do |format| 
    format.html 
    format.json { render json: @cars } 
end 

我使用下面的curl命令來測試它

curl -i -H "Accept: application/json" -H "Content-type: application/json" -H "X-User-Email: $EMAIL" -H "X-User-Token: $TOKEN" -X GET http://localhost:3000/cars.json\?id\=4 

這是得到執行

SELECT "fuel_types".* FROM "fuel_types" WHERE "fuel_types"."id" = $1 LIMIT 1 [["id", 4]] 

    Car Load (0.7ms) SELECT "cars".* FROM "cars" INNER JOIN "car_fuel_types" ON "cars"."id" = "car_fuel_types"."car_id" WHERE "car_fuel_types"."fuel_type_id" = $1 [["fuel_type_id", 4]] 

    Completed 500 Internal Server Error in 85ms (ActiveRecord: 17.0ms) 

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

任何人可以幫助我弄清楚爲什麼這個錯誤發生的查詢?

+0

我認爲這個問題可能是由您的遷移/表結構中。你能提供你的schema.rb嗎? –

+0

create_table「car_fuel_types」,force::cascade do | t | t.integer 「car_id」 t.integer 「fuel_type_id」 t.datetime 「created_at」,空:假 t.datetime 「的updated_at」,空:假 結束 CREATE_TABLE 「car_models」,力:做級聯| T | t.string 「名」 t.integer 「engine_displacement」 t.integer 「car_id」 t.datetime 「created_at」,空:假 t.datetime 「的updated_at」,空:假 結束 CREATE_TABLE「汽車「,force::cascade do | t | t.string「name」 t.datetime「created_at」,null:false t.datetime「updated_at」,null:false end –

回答

2

這也許應該回到你所需要的:

FuelType.find(fuel_type_id).cars 
+0

這是工作正常,當在軌道控制檯,但是當我嘗試寫一個相同的在汽車控制器的索引功能查詢 ** @ cars = FuelType.find('id =?',params [:fuel_type_id])。汽車** 它給了我這個錯誤**不能用'id'找到所有FuelTypes:(id =?,4)(找到1個結果,但正在尋找2)**。你可以請幫忙 –

+0

嘗試像這樣'@cars = FuelType.find(params [:fuel_type_id])。cars'。你只需要這個ID。在這裏看看它是如何工作的:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find – IngoAlbers

+0

現在它給這個錯誤**未定義的方法'fuel_type_id'爲# ** –