переопределение атрибута функции рельсы монгоид - PullRequest
2 голосов
/ 23 марта 2011

У меня есть такая модель.

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

общая сумма зарплаты и комиссионных.зарплата и комиссионные оба сохраняются в центах.Но моя проблема в том, что когда он редактируется, мне нужно показать его в долларах.

Например, если оклад в центах равен 5000000, то когда я нажимаю edit, мне нужно увидеть 50000 в текстовом поле оклада.

Приветствуются и другие решения

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Если вы хотите применить этот шаблон на уровне модели, вы можете переопределить методы установки и получения:

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

В этом случае вы будете иметь редактирование / отображение бесплатно, без написания каких-либо помощников.

Хотя, я думаю, что правильный способ сделать это - на уровне представления через определение помощника. Модель не должна быть связана с этим.

2 голосов
/ 23 марта 2011

Посмотрите на ActionView::Helpers::NumberHelper.В вашем случае вы могли бы написать своего собственного помощника следующим образом:

def money_to_textbox (money)
    money / 100
end

Этот вспомогательный метод должен быть помещен в app \ helpers, а затем в представление, которое вы можете использовать следующим образом:

<%= money_to_textbox @money %>
...