2016-11-22 2 views
0

Я пытаюсь реализовать деньги-рельсы, и я побежал в следующей ошибку:Рельсов денег неопределенного метод `центы

undefined method `cents' for "1,000.00":String

Я последовал this tutorial, чтобы получить„фантазию“ввод валюты поля.

DB схемы:

t.integer "balance_cents", default: 0,  null: false 
t.string "balance_currency", default: "USD", null: false 

Модель:

monetize :balance_cents, as: :balance, allow_nil: :true, :numericality => { :greater_than_or_equal_to => 0} 

def initialize(attributes = {}) 
    super 
    @balance = attributes[:balance] 
end 

Форма:

<%= form_for(@asset, url: assets_new_path) do |f| %> 
    <%= f.label :balance, "Balance/Value ($)" %> 
    <%= f.number_field :balance, data: { role: 'money', a_sep: ',', a_dec: '.' }, class: 'form-control' %> 

Контроллер:

def create 
    @asset = Asset.new(asset_params) 
    if @asset.save 
    flash[:success] = "New asset created successfully." 
    redirect_to assets_path 
    else 
    ... 
    end 
end 

def asset_params 
    params.require(:asset).permit(:balance) 
end 

Должен ли я настраивать поле баланса: другое (лучше)?

ответ

1

В соответствии с Rails Guides лучший способ сделать это в обратном вызове after_initialize.

+0

Я удалил переопределение 'initialize' из моей модели, и что, кажется, сделали свое дело. Я буду честен, у меня было это там, потому что я изначально следовал руководству по рельсам Майкла Хартла, и он сделал это для одной из своих моделей. Я не совсем понимаю, почему. – CChandler81

0

Используйте balance_satangs для вашей колонки вместо balance_cents

Смежные вопросы