2012-11-05 27 views
0

我有一對一的相關,用下列活性記錄模型(示例):限制在導軌3(ActiveRecord的)內協會

User <-1-1-> employee <-1-1-> contact <-1-1-> 
permanentAddress contact <-1-1-> communicationAddress  

當使用ActiveRecord查詢觸發:

User Load (1.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", "49"]] 
    Employeedetail Load (1.8ms) SELECT "employeedetails".* FROM "employeedetails" WHERE "employeedetails"."User_id" = 49 LIMIT 1 
    Contactdetail Load (0.6ms) SELECT "contactdetails".* FROM "contactdetails" WHERE "contactdetails"."employeedetail_id" = 40 LIMIT 1 
    Address Load (1.1ms) SELECT "addresses".* FROM "addresses" WHERE "addresses"."contactdetail_id" = 52 LIMIT 1 
    CACHE (0.0ms) SELECT "addresses".* FROM "addresses" WHERE "addresses"."contactdetail_id" = 52 LIMIT 1 

問題:如何將地址表[inner association]LIMIT增加到2。

回答

0

您可以使用limit

Address.limit(2).where("contactdetail_id = ?", 52) 

因此,它將返回前2個地址都contactdetail_id = 52查看更多Limit and Offset

+0

有沒有什麼方法可以重寫此方法? –

+0

爲什麼你想重寫?,如果你想要比這更多,我想你應該寫你自己的SQL查詢。 – Thanh

1

我認爲沒有辦法來覆蓋這個has_one和belongs_to的情況下的限制,因爲默認情況下,當我們寫user.employer時會觸發的SQL在它上面設置了LIMIT 1約束...如果你想要一個聯繫人有兩個地址,那麼你應該將關係從has_one更改爲has_many,然後應用2的限制使用驗證...

+0

感謝您的建議,現在正在工作,唯一的問題是,現在,我得到無序的數據。我現在必須解決,如果你有一些建議,請建議。 –

+0

您可以使用has_many關係中給出的訂單選項... –