【发布时间】:2010-10-25 13:10:40
【问题描述】:
在我的数据库中有列名,例如'delete'或'listen-control'等。这些不能更改,所以我想给这些名称起别名以避免在我的应用程序中出现问题。
我找到了the following code,但它已经过时(2005 年 8 月 5 日)并且不适用于 Rails 3:
module Legacy
def self.append_features(base)
super
base.extend(ClassMethods)
end
module ClassMethods
def alias_column(options)
options.each do |new_name, old_name|
self.send(:define_method, new_name) { self.send(old_name) }
self.send(:define_method, "#{new_name}=") { |value| self.send("#{old_name}=", value) }
end
end
end
end
ActiveRecord::Base.class_eval do
include Legacy
end
如何给列名取别名?有可能吗?
【问题讨论】:
-
我看不出使用“delete”和“listen-control”作为列名有什么问题?您是否遇到错误或其他问题?
-
listen-control 会导致问题,因为它的名称中有一个破折号,这使其成为无效的 ruby 对象属性。 Ruby 会将“object.listen-control”解释为“object.listen, minus control”。并且 delete 可能是保留关键字。我不知道你为什么要这样做。有时正确的答案是停止尝试与 ruby 或 rails 作斗争。
-
define_method("listen-control", Proc.new { puts "bingo" })然后send("listen-control")。问题出在哪里?
标签: ruby-on-rails database ruby-on-rails-3 activerecord