未定义的方法`number_to_currency'为“2000”:字符串:

时间:2015-01-19 16:47:43

标签: ruby-on-rails ruby getter-setter

我想把价格用小数,而不只是整数。

我尝试使用getter和setter方法,以便在保存到ddbb之前将输入值更新为currency。

这是我的方法:

before_validation :format_price

def format_price
  self.min_price
end

def format_price=(amount)
  self.min_price = amount.number_to_currency
end

这是我的意见:

<%= f.input :format_price %>

我的模型中的列名为min_price,它是一个整数列(我想保存新值)。

当我把2000作为价格并保存时出现问题,我收到以下错误:

NoMethodError - undefined method `number_to_currency' for "2000":String:

为什么会这样?我无法让它发挥作用。

谢谢

1 个答案:

答案 0 :(得分:3)

此方法在ActionView::Helpers::NumberHelper#number_to_currency中定义。它给你一个提示,它应该只在视图的上下文中使用。

从模型中使用它会违反关注点。您的模型不负责格式化数据。

这应该在视图中完成,或者在视图中出现问题时使用演示者。

<%= f.input :format_price, value: number_to_currency(instance.format_price) %>