2011-09-20 42 views
4

我想在rails中使用模型的默認值。我所見過的最好的記錄方式是在遷移中使用:default參數。但是,它看起來像只適用於值。我正在嘗試設置默認表達式,具體爲currval('customers_id_seq'::regclass)。我可以手動添加默認表達式,但我無法弄清楚如何告訴rails使用默認值。創建模型對象時如何使用此默認值?如何在ActiveRecord中使用默認的sql表達式?

EDIT 下面是一個更具體的例子:

class CreateTestmodels < ActiveRecord::Migration 
    def up 
    create_table :testmodels do |t| 
     t.integer :idxfield, :null=>false 
     t.string :datafield 
     t.timestamps 

    end 
    execute("ALTER TABLE testmodels ALTER COLUMN idxfield SET DEFAULT currval('testmodels_id_seq'::regclass)") 
    end 

    def down 
    drop_table :testmodels 
    end 
end 

利用這種遷移,我可以運行insert into testmodels (datafield) VALUES ('sometestdata');,這將表中增加一個行,其中idxfield默認爲id

但是,如果我從rails控制檯運行Testmodel.create(:datafield=>"testdata"),它會將空值替換爲idxfield並引發異常。

回答

0

聽起來就像你正在嘗試使用Postgres序列,rails會在遷移中的所有主鍵定義中使用。

如果你需要將它添加到非主鍵列,那麼你就需要在添加默認的create_table之外運行ALTER TABLE和自己添加它,就像

execute("ALTER TABLE users ADD COLUMN foo INTEGER default nextval('users_id_seq'::regclass)") 
+0

我已經成功使用執行的字段。然而,我無法弄清楚如何使軌道實際上使用默認,當我運行。創建鏈接到此表的模型。 – Belly

相關問題