2016-04-05 3 views
3

モデルへの参加を支援し、正常に動作し:ActiveRecordの検索方法は?私は2つのモデルがすでに作成されてい

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.where (track_id: 2) 

これは動作し、私が望むGPを返しました。

私は名前で検索する:

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

、私のIDを返すために:

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

そして、それはこのようなものになるだろう:joinsキーワードを使用し

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

答えて

1

2つの関係に参加する:

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

注where句で複数の「トラック」あなたのテーブル名は、本当にありがとうございました、私はそれがこの方法あなたのアイデアのおかげで `GrandPrix.joins(「トラック」

+0

働いてしまっているので、:トラック).where(トラック:{ac_track_name: "spa"}) ' – Nikos4Life

関連する問題