Ruby on Rails: почему мое расширение класса не распознается? - PullRequest
1 голос
/ 14 декабря 2010

В views/products/list.html.erb Я использую:

<%= product.power.power_in_kw.to_kw if ... %>

to_kw определяется в lib/my_extensions.rb вместе с другими методами:

class Symbol
  def pluralize
    to_s.pluralize.to_sym
  end
end

class BigDecimal
  def to_kw
    number_to_currency(self, :unit => "kw", :format => "%n%u", :precision => 1)
  end
end

class Float
  def to_dollar
    number_to_currency(self)
  end
end

config/environment.rb имеет следующую строку в конце:

require 'my_extensions'

Однако я получил следующую ошибку:

undefined method `to_kw' for #<BigDecimal:2704620,'0.555E2',8(8)>

Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Я знаю, что прошло уже несколько часов с тех пор, как вы отправили это, но эти функции могут работать после перезапуска приложения Элементы в lib обычно не перезагружаются автоматически, как в app, поэтому сделанные изменения не будут отражены в приложении до полного перезапуска.

Просто выкинул его туда:)

Я также хочу отметить, что после запуска и запуска этих методов они, вероятно, не будут работать сразу. Это связано с тем, что ваши представления определены в контексте всех помощников представления Rails, например ActionView::Helpers::NumberHelper, который определяет number_to_currency. Однако ваше расширение в lib не определено в таком контексте и поэтому не может получить доступ к этим помощникам.

ActionView::Helpers::NumberHelper.number_to_currency может работать с большей вероятностью, чем ожидалось.

1 голос
/ 15 декабря 2010

Вы должны включить ActionView::Helpers::NumberHelper в свои BigDecimal и Float:

class BigDecimal
  include ActionView::Helpers::NumberHelper
  def to_kw
    number_to_currency(self, :unit => "kw", :format => "%n%u", :precision => 1)
  end
end

class Float
  include ActionView::Helpers::NumberHelper
  def to_dollar
    number_to_currency(self)
  end
end

Я думаю, что ошибка undefined method to_kw вызвана неопределенным методом number_to_currency.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...