在rails模型中手动设置列名

时间:2012-03-02 15:35:25

标签: ruby-on-rails-3

我在几个现有数据库周围构建一个rails应用程序,现有数据库中使用的列名称根本不适用于rails关联约定。有没有办法在类似于

的模型中设置列名别名
class User < Activerecord::Base
self.set_table_name "users"
end

当现有的db列不能使用默认的rails关联命名约定时,我可以设置列名别名吗?

3 个答案:

答案 0 :(得分:16)

在您的模型中,只需为属性(列)设置别名即可。例如:

class User < Activerecord::Base
  alias_attribute :new_column_name, :real_column_name
end

答案 1 :(得分:2)

如果您能够修改数据库列(即只有您的rails应用程序引用它),您可以使用rename_column方法编写迁移。因为您使用的是rails 3,所以您只需使用以下命令

即可

~: rails g migration RenameColumnNameToNewColumn columnName:columnType

显然将通用命名替换为最适合您的命名。这应该为你创建一个看起来像这样的迁移,如果没有,修改它看起来类似于下面的代码

 class ChangeOldColumnToNewColumn < ActiveRecord::Migration
      def up
          rename_column :tableName, :oldColumn, :newColumn
      end

      def down
          rename_column :tableName, :newColumn, :oldColumn
      end
 end

如果您能够更改实际表格中的列名称,您可以在模型中放置与此类似的行,以实现您的目标。

alias_attribute :newColumnName, :existingColumnName

如果列名称混淆了rails,则可能需要将existingColumnName放在双引号内。

答案 2 :(得分:0)

最近,我正在尝试使用以前由PHP编写的Rails重构项目,而我遇到了完全相同的事情。

在我入侵了一些Rails代码之后,事实证明这绝对是可以做到的,并且确实需要修改很多代码以使其完美,也许是出于这个原因,而且这不是Rails的标准工作方式,所以到目前为止,没有人实现它。

如果对此感兴趣,可以在这里查看我的代码:https://github.com/yanyingwang/active_columns_mapping

据我认为,此功能在某些特殊情况下可能非常有用,如果熟悉Rails核心代码的人确实实现了此功能,那就太好了。