0

私は has_one 関連付けを持っています:

has_one 関連付けユーザー -> 顧客モデル

ユーザーは customer_id を持ちますか、それとも顧客は user_id 属性を持ちますか?

他の質問: 私の _form に、顧客に関連付けられていないすべてのユーザーの選択/オプションを入れたいのですが、それを行うための最良の方法はどれですか?

どうもありがとう。

4

1 に答える 1

1

_id フィールドは常に属しているモデルにあり、他のテーブル名を参照します。

class Customer < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_one :customer
end

この場合、customers テーブルには user_id フィールドがあります。

2 番目の質問では、SQL で外部結合を使用して欠損値が見つかりました。あなたが望むSQLは

select 
from users
  left outer join customers on users.id = customers.user_id
where customers.id is null

ActiveRecord で、User クラスにスコープを追加します。

Rails 3.x の場合:

class User < ActiveRecord::Base
  has_one :customer

  scope :missing_customer,
    includes(:customer).where("customers.id is null")
end

Rails 2.3.x の場合:

class User < ActiveRecord::Base
  named_scope :missing_customer,
    { :joins => "left outer join customers on users.id = customers.user_id",
      :conditions => "customers.id is null" }
end
于 2013-01-22T16:17:15.770 に答える