したがって、StateとAcquisitionという2つのモデルがあります。州has_many買収。私は、51レコードのオートインクリメント整数プライマリキーがかなりばかげているように感じました。だから私は、国が2文字の略語であること(PKように国家のためのモデルを変更し、私はどこでも、実際の状態名を格納していないよ:Railsの主キーを文字列に変更する
class State < ActiveRecord::Base
self.primary_key = "state"
has_many :acquisition_histories
end
問題は、私は私の取得モデルを作成したとき、それが作成されています。外部キー列が整数としてSTATE_ID具体的には、スクリプト生成/移行がやった:。
class CreateAcquisitions < ActiveRecord::Migration
def self.up
create_table :acquisitions do |t|
t.date :date
t.string :category
t.text :notes
t.references :state
t.timestamps
end
end
end
私はこの問題は私の私の取得にメソッドを作成していることが、データ型はintにそれを設定しますt.referencesと仮定していますクラスは、テーブル取得のstate_idフィールドに状態の省略形を入れようとしています(そして、そうです、それはs ays:移行スクリプト内の状態)。メソッドは失敗しませんが、state_idフィールドに0を入れ、レコードはetherに入ります。
コードを取得するために状態テーブルを保存しなければならない場合は、(おそらくメモリキャッシュされた、小さな)データベースオーバーヘッドがあります。しかし、おそらく過最適化です。私はそれをしますが、私は年をとっており、VAX 8700日ではもっと重要でした。 –
そのようなことについては、ステートクラス、つまりALL = State.allで定数を定義して、State :: ALLをドロップダウンなどのソースとして使用する傾向があります。そのようにSQLクエリはProductionの起動時にのみ実行されます。 –
私はパフォーマンスについてまったく心配していません。余分な一意の識別子の概念が嫌いです。しかし、私はすべてを取り戻す方法を理解できると仮定して、大会に戻ります。私はRailsにはかなり新しいです。 – fr0man