简体   繁体   中英

overriding attribute function rails mongoid

I have a model like this.

class Money
  include Mongoid::Document

  #interval is how often the compensation is paid
  field :salary, :type => Integer # must be saved in cents
  field :commission, :type => Integer # must be saved in cents
  field :total, :type => Integer # must be saved in cents
end

total is sum of salary and commission. salary and commission both are saved in cents. But my problem is that when it is edited i need to show it in dollar figure.

For example, if salary in cent is 5000000 then when i press edit i need to see 50000 in the salary textbox.

Some other solutions are also welcomed

If you want to enforce this pattern at the model level then you could override the setters and getters:

class Money
  #...
  def salary
    self.salary / 100
  end
  def salary=(value)
    self.salary * 100
  end
end

In this case you'll have the editing/displaying for free, without writing any helpers.

Although, I think the proper way for doing it is at the view level through a helper definition. The model should not be concerned with this.

Look at ActionView::Helpers::NumberHelper . In your case you could write your own helper like this:

def money_to_textbox (money)
    money / 100
end

This helper method should be placed in app\\helpers and then in a view you can use like this:

<%= money_to_textbox @money %>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM