How to override a column in Rails model?

前端 未结 4 426
被撕碎了的回忆
被撕碎了的回忆 2020-12-14 09:31

I have a model for one of my database tables. I want to override the column name for that particular table. How would I achieve it.

For example, let my table be call

相关标签:
4条回答
  • 2020-12-14 09:50

    You can simply define a method of the same name as the column. To get the actual column value, use self[column_name]. So something like this should work:

    class Dummy < ActiveModel::Base
      def col_a
        self[:col_a] % 10 == 0 ? 0 : self[:col_a]
      end
    end
    

    (This assumes col_a is an integer.)

    0 讨论(0)
  • 2020-12-14 10:02

    I'm a little late to the party here, but a really elegant way to do it is to simply use super

    class Dummy < ApplicationRecord
      def col_a
        super % 10 === 0 ? 0 : super
      end
    end
    
    0 讨论(0)
  • 2020-12-14 10:09

    You can override the col_a method. Use the read_attribute method to read the value in database. Something like this:

    def col_a
      if self.read_attribute(:col_a).to_s.end_with?('0')
        0
      else
        self.read_attribute(:col_a)
      end
    end
    
    0 讨论(0)
  • 2020-12-14 10:09

    You can achieve that by overwriting default accessors as described in the documentation. All column values are automatically available through basic accessors on the Active Record object, but sometimes you want to specialize this behavior. This can be done by overwriting the default accessors (using the same name as the attribute) and calling read_attribute(attr_name) and write_attribute(attr_name, value) to actually change things.

    Scroll to the Overwriting default accessors section for more info.

    0 讨论(0)
提交回复
热议问题