2010-11-20 14 views
5

私は、RailsモデルのカスタムID(デフォルトの自動インクリメントの代わりに)を使用できるようにしたいと思います。基本的に、すべてのIDはiTunesのストアIDになります。これは長整数だけです。デフォルトの自動インクリメントIDをオフにして、それを設定する必要がありますか?これらのIDは他のモデルの外部キーとしても使用されます。このようなカスタム非自動インクリメントActiveRecord "id"カラムは可能ですか?

答えて

6

何か:

create_table :blah, {:id => false} do |t| 
    t.int :my_custom_int_id 
end 
execute "ALTER TABLE blah ADD PRIMARY KEY (my_custom_int_id);" 
+0

これは私が探していたようです、ありがとうございます。 – markquezada

+1

また、 'set_primary_key:my_custom_int_id'(Rails 3)または' self.primary_key =:my_custom_int_id'(Rails 4)をモデルに追加する必要があります。 – gregoltsov

2

あなたがモデルを保存する前に、手動でIDを設定することができます。

a = Model.new 
a.id = 8888 #from itunes 
a.save 

しかし、あなたの代わりに、このアプローチのitunes_idと呼ばれる別のフィールドを検討すべきです。

+0

私は現在、別の 'itunes_id'フィールドを使用しています。問題は、使用しているAPIがitunes IDを返すので、itunes_id - > my model idを追加検索するのが苦痛だということです。 – markquezada

+1

私は本当に彼が何をすべきか言った方法が好きですが、あなたのアドバイスを提供しています。ベストプラクティス: – baash05

+0

@daveatflowそれは個人的な意見ではなく、ベストプラクティスIMOです。 –

関連する問題