2011-08-19 31 views
0

Rails自動爲像created_at和updated_at這樣的列插入值。我能否以這種方式配置導軌,以便更新更多的列。例如,我所有的表都有一個名爲user的列,保存當前用戶值,我可以在缺少任何數據庫更改的情況下插入用戶嗎?使用rails在表格中插入默認值

回答

2

你可以嘗試在你的模型中使用before_save函數,除非我誤解了這個問題。

before_save :defaults 

def defaults 
    #some stuff to set your defaults 
end 
1

是的,你可以在模型中使用before_filter,例如,

before_update :set_value 

def set_value 
    self.value = "hello" 
end 
+0

在進一步閱讀,似乎要與所有的資源相關聯當前用戶。你爲什麼不把範圍內的所有資源放在current_user下面,然後你不需要使用類似上面的過濾器? – amaseuk

0

您可以使用ActiveRecord回調在更改狀態時觸發邏輯,例如將對象保存到數據庫之前。 created_at和updated_at列在創建對象(before_create)或更新(before_save)時自動更新。您可以使用ActiveRecord :: Callbacks命名空間中定義的類方法定義自己的回調。一個例子是

# app/models/example.rb 
class Example < ActiveRecord::Base 
    before_save :do_something 

    def do_something 
    self.value = value 
    end 
end 

如果你特別想記錄下創建,更新或刪除記錄的用戶,你可以節省一些工作和使用Userstamps Rails插件,自動記錄用戶。這個插件位於https://github.com/delynn/userstamp

# app/models/example.rb 
class Example < ActiveRecord::Base 
    model_stamper 
end 

# app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    include Userstamp 
end 

您需要將userstamps列添加到每個要在其上記錄用戶行爲的模型。

上ActiveRecord的回調的更多信息可以在這裏找到:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

時間戳信息可以在這裏找到: ActiveRecord的時間戳:http://api.rubyonrails.org/classes/ActiveRecord/Timestamp.html