Ruby on rails 3 如何使用Rails 3将创建的_at分配给遗留数据库中的另一个列名?

Ruby on rails 3 如何使用Rails 3将创建的_at分配给遗留数据库中的另一个列名?,ruby-on-rails-3,Ruby On Rails 3,我是Rails新手,有一个遗留数据库,在每个表中包含DateCreated和DateUpdated列。我想在保存之前使用模型中内置的created_at和updated_at属性设置这些字段,但我的尝试会产生: NoMethodError(在“for”处创建的未定义方法): app/models/user.rb:45:inset\u create\u update\u time' app/models/user.rb:24:inblock in' app/controllers/users\u

我是Rails新手,有一个遗留数据库,在每个表中包含DateCreated和DateUpdated列。我想在保存之前使用模型中内置的created_at和updated_at属性设置这些字段,但我的尝试会产生: NoMethodError(在“for”处创建的未定义方法
):
app/models/user.rb:45:in
set\u create\u update\u time' app/models/user.rb:24:in
block in'
app/controllers/users\u controller.rb:15:in
create'

型号代码:

class User < ActiveRecord::Base
attr_accessible :email, :user_name, :password, :password_confirmation, :DateCreated,     :DateUpdated
alias_attribute :email, :Email
alias_attribute :user_name, :UserName
alias_attribute :remember_token, :RememberToken

self.table_name = "adm.User"
self.primary_key = "UserId"


has_secure_password
before_save { |user| user.email = email.downcase }
before_save { set_create_update_time}
before_save :create_remember_token

#validations
validates :user_name, presence: true, length: { maximum: 50 }
validates :password, presence: true, length: {minimum: 8}
validates :password_confirmation, presence: true

VALID_EMAIL_REGEX = 
/\A[\w+\-.]+@[ a-z\ d\-.]+\.[a-z]+\z/i
#  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: {    case_sensitive: false} 



private 
  def create_remember_token
  # Create the token
  self.remember_token = SecureRandom.urlsafe_base64

任何帮助都将不胜感激,谢谢

您应该在使用
self.created\u和
self.updated\u。只有这样,才会访问对象(用户记录)的实例属性

此外,您可能希望在更新后执行
回调,以更新
DateUpdated
属性


我可以知道你为什么要创建别名和改变命名方式吗?Rails中的惯例是使用
attribute\u name
样式表示属性和方法,使用
MyClass
样式表示类。

如您所知,如果您的模型在
处创建了字段
,在
处更新了字段,则ActiveRecord将相应地进行设置/更新。在您的情况下,因为您有自己的属性,所以需要手动更新它们

你在正确的轨道上。您的问题是,在右侧,您正在引用在
处创建的不存在的方法/变量
——这就是异常所说的

我会进行如下回调-将属性设置为当前时间:

before_create :set_created_at
before_save :set_updated_at

def set_created_at
  if DateCreated.blank?
    self.DateCreated = Time.now.utc
  end
end

def set_updated_at
  self.DateUpdated = Time.now.utc
end

不过,感谢您的回复,self.created_at仍然提供NoMethodError异常。我正在创建别名b/c我有一个不符合rails命名约定的遗留数据库,我自己也无法更改数据库上的列名。好吧我以为您已经在数据库中创建了_at并更新了_at字段,还以为您只是想将它们复制到DateCreated和DateUpdated。祝你好运谢谢,工作很有魅力!
before_create :set_created_at
before_save :set_updated_at

def set_created_at
  if DateCreated.blank?
    self.DateCreated = Time.now.utc
  end
end

def set_updated_at
  self.DateUpdated = Time.now.utc
end