14

私のアプリケーション全体を通して、self.ユーザーの名前を参照する必要はありません。name正常に動作します。

self次のコードが意図したとおりに機能する必要があるのはなぜですか?

class User< ActiveRecord::Base
    before_save :validate_name

def validate_name
    if self.name.nil? || self.name.empty?
        self.name= "Mr. No Name"
    end
end

ちなみに、これvalidates_presence_ofは保存を防ぐために使用できることは知っていますが、名前が指定されていない場合はデフォルトで保存したいと思います。

Rails3.0.7。

4

1 に答える 1

24

多くの場合、の使用は、selfRubyにそれをメソッド呼び出しとして認識させ、変数として誤って解釈しないようにすることです。と呼ばれるメソッドの予備知識がなければ、Rubyは変数代入のようday=day = "x"見えます。self.day = "x"常にメソッド呼び出しです。

これが問題になる理由は、Userクラスファイルが解析された後にnameとメソッドが動的に追加されるためです。name=モデルを使用するときにRailsが最初に行うことは、関連するデータベースフィールドのmakeメソッドですが、これはuser.rbファイルが解析された後に発生します。

于 2012-04-12T16:06:05.103 に答える