2015-12-16 1 views
1

Я хочу показать цены на продукты и прочитать, что использование Decimal намного надежнее, чем Integer или использование Floats.Как принять BigDecimal значение в базе данных и сделать его человеком читаемым в представлении

Я хотел бы знать, как извлечь фактическое число 17.99 из базы данных, когда оно хранится как <BigDecimal:646c8b8,'0.2E2',9(18), например. Мне нужно показать это значение в форме.

До сих пор у меня есть:

f.input :image_prices, as: :check_boxes 

, которые будут выводить на мой взгляд:

#<IMAGEPRICE:0X007F0431BB0850> 
#<IMAGEPRICE:0X007F0431BB0710> 
#<IMAGEPRICE:0X007F0431BB05D0> 
#<IMAGEPRICE:0X007F0431BB0490> 

Но при сохранении правильные идентификаторы сохраняются. Модельные отношения заключаются в следующем:

class Image < ActiveRecord::Base 
    has_many :image_options, dependent: :destroy 
    has_many :image_prices, through: :image_options 
end 

class ImageOption < ActiveRecord::Base 
    belongs_to :image_price 
    belongs_to :image 
end 

class ImagePrice < ActiveRecord::Base 
    has_many :image_options 
    has_many :images, through: :image_options 
end 

Я так застрял в данный момент, и попытались добрых 3 часа теперь безрезультатно.

+0

Три часа? Пожалуйста, прочитайте http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users. Пожалуйста, не задавайте повторяющиеся вопросы. Вместо этого прочитайте «[ask]» и «[mcve]». Дубликаты разбавляют усилия тех, кто отвечает и расстраивает их, когда их работа, казалось бы, не помогла. Это также смущает эти поиски. –

+0

@theTinMan ваш комментарий взят на борт, он перенесет его в плохой день и в следующий раз попытается успеть решить его самостоятельно, хотя я все еще запутался относительно того, почему '' возвращался, может быть, вы могли бы помочь? – Richlewis

+0

На вопрос ответили в выбранном вами ответе. Вы должны предоставить метод 'to_s' для вывода значения значимым/соответствующим образом. Ruby не знает, что вы хотите увидеть, поэтому по умолчанию используется вывод 'inspect'. –

ответ

4

Если проблема заключается в том, что цены на изображение отображаются в списке флажков как #<IMAGEPRICE:0X007F0431BB0850>, просто определите способ to_s в вашей модели ImagePrice и попросите его вернуть строковое представление цены. Например, если десятичное значение этой цены хранится в атрибуте price, ваш метод будет выглядеть как

class ImagePrice < ActiveRecord::Base 
    # ... 
    def to_s 
    price.to_s 
    end 
end 
+0

ОК, так что это похоже на самое простое решение когда-либо :-), большое вам спасибо. вопрос, однако, как называется 'to_s', когда я не использую' to_s' в моей форме? – Richlewis

+0

'to_s' на экземпляре модели обычно используется' simple_form' или 'formtastic' для генерации меток для каждого элемента в коллекции. Если вам интересно, вы можете проверить исходный код этих драгоценных камней. 'simple_form' даже имеет возможность указать, какой метод использовать для создания меток формы. – eugen

+0

спасибо, что очень помогает, знаете ли вы, почему '' был визуализирован? – Richlewis