2016-04-05 56 views
3

我有兩個模型已經建立並正常工作:ActiveRecord的查找方法?幫助加盟模式

class Track < ActiveRecord::Base 
    has_many :grand_prixes 
end 

class GrandPrix < ActiveRecord::Base 
    belongs_to :track 
end 

我的數據庫模式是:

create_table "tracks", force: :cascade do |t| 
    t.string "track_name" 
    t.string "description" 
    t.string "country" 
    t.string "lenght" 
    t.integer "pit_boxes" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "ac_track_name" 
    end 
add_index "tracks", ["ac_track_name"], name: "index_tracks_on_ac_track_name" 




create_table "grand_prixes", force: :cascade do |t| 
    t.datetime "gp_date" 
    t.integer "max_slots" 
    t.integer "event_id" 
    t.integer "track_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 


    add_index "grand_prixes", ["track_id"], name: "index_grand_prixes_on_track_id" 

我能可以發現,通過與軌道相關聯的獲大獎id,但我想通過以前通過曲目名稱(來自另一個網站的變量)搜索到的曲目的id找到表中的GrandPrix:

GrandPrix.where (track_id: 2) 

這工作,並返回我想要的GP。

我想按名稱搜索:

GrandPrix.where (Track.name = "thenameIwant") 

,並返回我的ID:

SELECT id FROM WHERE tracks tracks.name LIKE 'thenameIwant'; 

然後,它會是這樣的:

GrandPrix.where (Track.id = SELECT id FROM WHERE tracks tracks.name LIKE 'thenameIwant') 

回答

1

使用joins關鍵字加入兩個關係:

GrandPrix.joins(:track).where(tracks: {name: "thenameIwant"}) 

注意複數「軌道」在where子句中,因爲你的表名是「軌道」

+0

這麼多的感謝,我得到了它這樣工作的感謝你的想法 'GrandPrix.joins(:軌道)。(軌道:{ac_track_name:「spa」})' – Nikos4Life