使用rails在表中插入默认值

时间:2011-08-19 12:55:47

标签: ruby-on-rails

Rails会自动为created_at和updated_at等列插入值。我可以以更新更多列的方式配置rails。例如,我的所有表都有一个名为user的列,其中包含当前用户值,我是否可以默认rails ti insert user用于任何数据库更改?

3 个答案:

答案 0 :(得分:2)

您可以尝试在模型中使用before_save函数,除非我误解了这个问题。

before_save :defaults

def defaults
   #some stuff to set your defaults
end

答案 1 :(得分:1)

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

before_update :set_value

def set_value
   self.value = "hello"
end

答案 2 :(得分:0)

您可以使用ActiveRecord回调在更改状态时触发逻辑,例如在将对象保存到数据库之前。创建对象(before_create)或更新(before_save)时,created_at和updated_at列会自动更新。您可以使用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