2011-06-30 7 views
1

私はRuby on Rails 3.0.7とMySQL 5.1を使用しています。私は、オブジェクトidを移行ファイルに格納するように強制したいと思います。オブジェクト `id`をマイグレーションファイルに保存するにはどうしたらいいですか?

User.create!(
    :name => 'Test name' 
) 

が、私はこのような何かをしたいと思います:たとえば、私はこれを持っている

User.create!(
    :id => '12345', # Force to store the object data with id '12345' 
    :name => 'Test name' 
) 

を:上記のコードは、データベースにid値を強制されません。

可能でしょうか?もしそうなら、どうですか?

+1

このようなことが可能かどうかわかりませんが、オブジェクトIDを強制するのは良い考えではないと思います。アプリケーションの設定によっては、IDの競合が発生し、移行が中断される可能性があります。 – Koraktor

+0

@Koraktor - 私はこれを使用して、アプリケーションの起動時にいくつかのデフォルトデータを設定します。データベースを初期化して、期待どおりに動作することを確認するだけです。 – user502052

+3

デフォルトのデータにrakeタスクまたはdb:seedを使用しますか? –

答えて

3

idのように制限されたフィールドを割り当てることはできません。しかし、あなたはそれらを個別に設定することができます。

user = User.new(:name => 'Test name') 
user.id = 12345 
user.save! 

OR

User.create!(:name => 'Test name') do |user| 
    user.id = 12345 
end 
0

あなたが実際に保護されたフィールドを大量に割り当てることができます。それを行う方法は次のとおりです。お使いのモデルでは次の内容を定義します。

def attributes_protected_by_default 
    default = [ self.class.inheritance_column ] 
end 

あなたがここでやっていることは基本メソッドをオーバーライドします

# The primary key and inheritance column can never be set by mass-assignment for security reasons. 
def self.attributes_protected_by_default 
    default = [ primary_key, inheritance_column ] 
    default << 'id' unless primary_key.eql? 'id' 
    default 
end 

... id、またはprimary_key列を除いただけinheritance_columnを含めること。この時点で、そのモデルのIDを一括して割り当てることができます。

関連する問題