0

外部キーをセットアップするための適切な組み合わせを見つけるのに苦労しています。私が何をしても、コンソールはzip_codesのみである必要があるのに、まだzip_idsを読み取っています。

コンソールでこれを受け取ります:

Zip.code(30052).users.count
  Zip Load (12.5ms)  SELECT `zips`.* FROM `zips` WHERE `zips`.`code` = 30052 LIMIT 1
   (0.3ms)  SELECT COUNT(*) FROM `users` WHERE `users`.`zip_code` = 12859
 => 0 

問題は、私が指定したことのない郵便番号 12859 をどういうわけかプルしている 2 行目です。これは、ユーザー テーブルの zip_code ではなく zip_id を使用しているためです。

zip.rb:

 has_many :users,  :foreign_key => "zip_code"

user.rb :

  belongs_to :zip
4

1 に答える 1

1

コードを主キーとして設定します

class Zip < ActiveRecord::Base
  self.primary_key = 'code'
  has_many :users, foreign_key: 'zip_code'
end

コード列に一意のインデックスを追加することを忘れないでください。

class AddIndexToZipsCode < ActiveRecord::Migration
  def change
    add_index :zips, :code, unique: true
  end
end

そして、の一意性を検証しますcode

# zip.rb
validates :code, uniqueness: true

次に、zipが見つかりますZip.find(code)

テーブルにインデックスを追加zip_codeしますusers

class AddIndexToUsersZipCode < ActiveRecord::Migration
  def change
    add_index :users, :zip_code
  end
end

さて、Zip.find(code).users.count動作するはずです。

逆の関係を機能させるには ( user.zip)、関連付けでforeign_keyを指定する必要があります:

# user.rb
belongs_to :zip, foreign_key: :zip_code
于 2013-09-11T13:56:23.743 に答える