0

我正在尝试编写一个辅助方法,将浮点数从英制转换为公制。我在 application_helper.rb 中有以下方法:

  module ApplicationHelper
    def weight_conversion_factor
      if User.measurement_units == 'metric'
        0.453592
      elsif User.measurement_units == 'imperial'
        1
      end
    end
  end

如果我调用current_user.measurement_units视图,它会很好用。当我尝试在application_helper.rb文件中调用 User.measurement_units 时,我得到undefined method了 #`的 measure_units'

我在这里想念什么?我不应该只能measurement_units从 applicatoin_helper 中调用用户吗?measurement_units是用户表中的一个字段。

谢谢!

4

2 回答 2

2

User是类,而不是实例。current_user也可以在辅助方法中使用:

module ApplicationHelper
  def weight_conversion_factor
    return nil if current_user.nil?

    if current_user.measurement_units == 'metric'
      0.453592
    elsif current_user.measurement_units == 'imperial'
      1
    end
  end
end

或者,这可以进入User模型:

class User < ActiveRecord::Base

  # Other code...

  def weight_conversion_factor
    if measurement_units == 'metric'
      0.453592
    elsif measurement_units == 'imperial'
      1
    else
      nil
    end
  end

end
于 2013-08-09T21:28:39.440 回答
1

如果measurement_units是 User 表中的一个字段,您需要谈论一个特定的用户(一个实例)才能访问该字段。例如,您可以执行以下任何操作,因为它们访问特定用户的 measure_units:

current_user.measurement_units
User.new.measurement_units
User.last.measurement_units
User.find(1).measurement_units

如果您希望能够访问 User ()上的测量单位,您可以在 User.rb 模型中定义:

def self.measurement_units
  ...
end

有了这个你可以运行:User.measurement_units没有错误。

在您的情况下,您应该简单地current_user.measurement_units在您的助手中运行。

于 2013-08-09T21:28:58.987 回答