Rails 3模型将某些列映射到不同的模型属性

时间:2011-02-22 03:57:16

标签: sql ruby ruby-on-rails-3 activerecord legacy

我有一个名为“DXFTACCTS”的旧遗留表,我创建了Rails模型“Account”。

class Account < ActiveRecord::Base
  set_table_name "DXFTACCTS"
end

问题是DXFTACCTS有像“XORFNAME”这样的字段,我希望它在模型中是“first_name”,依此类推。如何将特定表列“映射”到模型属性?

谢谢!

2 个答案:

答案 0 :(得分:10)

您可以使用方法alias_attribute,如下所示:

class Account < ActiveRecord::Base
  set_table_name "DXFTACCTS"

  alias_attribute :first_name, :XORFNAME
end

alias_attribute创建方法first_name,first_name =和first_name?它将映射到表中的XORFNAME列。但是,您将无法在常规列等条件下使用它。例如:

Account.all(:conditions => { :first_name => "Foo" })

那会失败......

答案 1 :(得分:2)

我认为像getter和setter方法的定义应该可以解决这个问题:

class Account < ActiveRecord::Base    

  ...

  def firts_name
    self[:XORFNAME]
  end

  def first_name= value
    self[:XORFNAME] = value 
  end

  ...

end