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、 #` に対して Measurement_units ' が取得されます

ここで何が欠けていますか?measurement_unitsapplicatoin_helper 内から User を呼び出すことはできませんか? measurement_unitsUser テーブルのフィールドです。

ありがとう!

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

が User テーブルのフィールドである場合、フィールドにアクセスできるようにするには、特定のユーザー (インスタンスmeasurement_units)について話す必要があります。たとえば、特定のユーザーの Measurement_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 に答える