after_find或after_initialize不能用于更新表单字段?

时间:2013-11-09 19:38:36

标签: ruby-on-rails ruby-on-rails-3.2

after_find或after_initialize似乎没有更新我的vehicle / edit.html.erb视图中的里程表。

查看:

= form_for(@vehicle) do |f|
  = f.number_field :odometer

型号:

after_find :standardise_numbers
...
def standardise_numbers
    metric ? self.odometer.miles.to.kilometers : self.odometer
end

1 个答案:

答案 0 :(得分:1)

= f.number_field :odometer只会返回@vehicle.odometer的任何值。您需要一个帮助函数,在表单中的standarise_numbers上调用@vehicle

你也可以在没有助手的情况下做到这一点:

= form_for(@vehicle) do |f|
  = f.number_field :odometer, :value => @vehicle.odometer

我更喜欢使用帮助程序,而不是在视图中进行模型方法调用。

另一种选择是覆盖odometer上的Vehicle访问者:

class Vehicle << ActiveRecord::Base

  def odometer
    metric ? self.read_attribute(:odometer).miles.to.kilometers : self.read_attribute(:odometer)
  end

end

参考:http://apidock.com/rails/ActionView/Helpers/FormTagHelper/number_field_tag