【问题标题】:Rails 3 model mapping certain columns to different model attributesRails 3模型将某些列映射到不同的模型属性
【发布时间】:2011-02-22 03:57:16
【问题描述】:

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

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

问题是 DXFTACCTS 有像“XORFNAME”这样的字段,我想在模型中成为“first_name”,等等。如何将特定表列“映射”到模型属性?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以像这样使用方法 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" })
    

    那会失败...

    【讨论】:

      【解决方案2】:

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

      class Account < ActiveRecord::Base    
      
        ...
      
        def firts_name
          self[:XORFNAME]
        end
      
        def first_name= value
          self[:XORFNAME] = value 
        end
      
        ...
      
      end  
      

      【讨论】:

      • 这就是我害怕的:-(
      • 下面的 DanneManne 提出了一种我以前不知道的简短而更好的方法。
      猜你喜欢
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多