2013-04-28 33 views
0

我有以下方法可以檢查某個人是否通過編號和運營商進行了集成,並且如果不符合通過編號進行的集成。如何在has_one關聯上傳遞嵌套值

class Person 
    has_one :number 

    def integration 
    number_and_carrier = Integration.where('number_id = ? and carrier_id = ?', number.id, carrier.id) if number && carrier 
    Integration.where('number_id = ?', number.id) if number && number_and_carrier.nil? 
    end 

end 

下面的代碼工作正常。但我想知道如何使用has_one關聯完成同樣的操作,以便我可以完全控制返回的集成對象。我能想象開始像這樣

has_one :integration, foreign_key: :number_id 

但我這是使用電流person_id(7750),而不是number_id快速實現。

SELECT "integrations".* FROM "integrations" WHERE "integrations"."number_id" = 7750 LIMIT 1 

我的問題是

  1. 我怎樣才能通過number.idhas_one關聯?
  2. 如何能在has_one查詢可以保持方法查詢(查詢,如果一個人的號碼和運營商有一個整合,如果不匹配數的積分只)

回答

0

從您的代碼推斷,而不是設置:foreign_key ,我想,你需要設置:primary_key => :number_id