2017-08-26 17 views
0

これは、PostgresでActiveRecordを使用しているレールプロジェクトです。カスタムユニークIDへの参照のレール

こんにちは私は2つのCSVで作業しています。 1つは州内に登録されているすべての有権者の記録です。このテーブルを作成したとき、生成された一意のIDをインデックス付きの列として使用せず、代わりに既に割り当てられた状態state_voter_idを使用しました。有権者テーブルのスキーマ:

create_table "voters", id: false, force: :cascade do |t| 
t.string "state_voter_id", null: false 
t.string "county_voter_id" 
t.string "first_name" 
t.string "middle_name" 
t.string "last_name" 
t.string "suffix" 
t.string "birthdate" 
t.string "gender" 
t.string "add_st_num" 
t.string "add_st_name" 
t.string "add_st_type" 
t.string "add_unit_type" 
t.string "add_pre_direction" 
t.string "add_post_direction" 
t.string "add_unit_num" 
t.string "city" 
t.string "state" 
t.string "zip" 
t.string "county" 
t.string "precinct" 
t.string "leg_dist" 
t.string "cong_dist" 
t.string "reg_date" 
t.string "last_vote" 
t.string "status" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.index ["city"], name: "index_voters_on_city" 
t.index ["first_name"], name: "index_voters_on_first_name" 
t.index ["last_name"], name: "index_voters_on_last_name" 
t.index ["state_voter_id"], name: "index_voters_on_state_voter_id", unique: true 
t.index ["zip"], name: "index_voters_on_zip" 
end 

私はこれは私が試したの移行である 有権者テーブルへの参照としてstate_voter_idを含む投票レコードの新しいテーブル/モデルに追加したい知っている:

def change 
create_table :votes do |t| 
    t.references :voter, column: :state_voter_id 
    t.string :county 
    t.string :date 

    t.timestamps 
end 

私は移行を実行したときに移行しましたが、有権者レコードを開始しようとしたときに次のエラーが発生しました:ActiveRecord::UnknownPrimaryKey: Unknown primary key for table voters in model Voter。私はまた、テーブルが大きなものを取るように設定されていたことに気づいた。

私は、英数字の文字列であるstate_voter_idの投票者を正しく参照するように設定するにはどうすればよいですか?線に沿って

答えて

0

何か:あなたの有権者モデルで

class AddPrimaryKeyToVoters < ActiveRecord::Migration 
    def change 
    change_column :voters, :state_voter_id, :primary_key 
    end 
end 

は、問題が移行していない、それはあなたのモデルにだ self.primary_key = "state_voter_id"

0

を追加します。あなたはこれが必要です

class Voter < ApplicationRecord 
    self.primary_key = 'state_voter_id' 
    ... 
end 

新しいApplicationRecordクラスのRails 5を想定しています。レール4を使用している場合は、いつものようにActiveRecord::Baseから継承してください。