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