2011-08-19 49 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