2015-06-25 178 views
0

我需要加入這兩個表,但我似乎無法做到正確。Ruby on Rails活躍記錄加入

型號

class Registration < ActiveRecord::Base has_many :region end

class Region < ActiveRecord::Base belongs_to :registration end

我所到目前爲止已經試過這是

`test = Region.joins(:registration)` 

,這將給我這個結果

[#<Region id: 1, name: "region1">, #<Region id: 1, name: "region1">]

看來我確實已經加入了兩張表,但我的困境是我還需要屬於註冊模型的索引。關於結果只是區域模型中可用的索引。

我也試了一下週圍的其他方法

test = Registration.joins(:region)

,但它給了我一個錯誤

Unknown column 'regions.registration_id' in 'on clause': SELECT註冊.* FROM註冊INNER JOIN地區ON地區. registration_id =註冊. id``

我同意這一點錯誤原因我沒有索引registration_id

回答

0

當你在一個表中定義belongs_to關係時,表中應該有它所屬的表的foreign_key。因此,在你的例子中,如果你有區域屬於註冊的關係,那麼區域應該有registration_id。看起來你已經定義了一個錯誤的關係。

因此,如果您將在地區確定registration_id並執行以下查詢:

Region.joins(:registration) 

你會看到區域表的ID與registration_id沿結果

希望這有助於

+0

該表看起來像這樣 註冊: id | region_id |名稱| 地區:| id |名稱| 那麼我應該如何在我的模型上定義它們? – BananaTiger

+0

Ohh ..那麼你應該has_many:註冊模型中的區域模型和belongs_to:區域。然後你可以執行查詢Registration.joins(:region) –

+0

我仍然在運行'Registration.joins(:region)時得到同樣的錯誤,它一直在尋找registration_id列 – BananaTiger

0

更改Registration model代碼

class Registration < ActiveRecord::Base 
    has_many :regions 
end 

然後喲你可以使用joins

test = Registration.joins(:region) 

希望它有幫助!

0
class Registration < ActiveRecord::Base 
    has_many :regions, inverse_of: :registration, dependent: :destroy 
end 

class Region < ActiveRecord::Base 
    belongs_to :registration, inverse_of: :regions 
end 

然後,請確保您的Region表正確顯示其關聯Registrationregistration_id列。如果它不包含列,繼續創建以下遷移:

rails g migration add_registration_ref_to_regions registration:references

rake db:migrate

現在,你應該能夠通過成功地查詢:

Registration.joins(:regions)Region.joins(:registration)

乾杯!