如何在has_one关联上传递嵌套值

时间:2013-04-28 21:00:04

标签: ruby-on-rails activerecord

我有以下方法检查一个人是否按编号和运营商进行了整合,如果不符合仅按编号进行整合。

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.id传递给has_one协会?
  2. has_one查询如何保持方法查询(检查某人是否按编号和运营商进行了整合,如果不符合仅按编号进行整合)

1 个答案:

答案 0 :(得分:0)

从您的代码中推断,我认为您需要设置:foreign_key

,而不是设置:primary_key => :number_id