にように私は、@user
とuser
の違いが何であるかを知っていただきたいと思います:Ruby on Railsの@userとuserの違いは何ですか?
@user = User.new
と
user = User.new
一部の人々は、@と@user
は、ビューで使用されるインスタンスであると言うが、私ユニットテストですでにこのインスタンスを参照してください。
それでは違いはありますか?目的やセマンティックなことなど何か?
にように私は、@user
とuser
の違いが何であるかを知っていただきたいと思います:Ruby on Railsの@userとuserの違いは何ですか?
@user = User.new
と
user = User.new
一部の人々は、@と@user
は、ビューで使用されるインスタンスであると言うが、私ユニットテストですでにこのインスタンスを参照してください。
それでは違いはありますか?目的やセマンティックなことなど何か?
インスタンス@user
コントローラで同じインスタンス@user
ないが、それらは同様の理由で使用しています。
@
インスタンス変数は、インスタンスオブジェクトの他のすべてのメソッドで使用できます。
コントローラにあなたが働く
def new
@user = User.new
apply_another_value_to_user
end
def apply_another_value_to_user
@user.nickname = 'Zippy'
end
を持っている場合。 user
のみnew
方法内で使用するために定義されているので、あなたがエラー「未定義のローカル変数やメソッド 『ユーザー』を」取得します
def new
user = User.new
apply_another_value_to_user
end
def apply_another_value_to_user
user.nickname = 'Zippy'
end
代わりにこれを行うと
...。ユニットテストでは、@user
を使用して、テストインスタンス内のさまざまなメソッドでユーザオブジェクトを共有できるようにします。コントローラでは、@user
を使用して、コントローラインスタンス内のさまざまなメソッド(およびビュー)でユーザオブジェクトを共有できるようにします。テスト中にコントローラインスタンスが初期化され、両方のインスタンス変数が作成されても、それらは同じ変数ではない可能性があります。
これは、コントローラインスタンス変数にアクセスするために、@user
を直接使用することができないため、コントローラインスタンス変数を参照するassigns(:user)
を使用する必要があるためです。
expects(assigns(:user).not_to be_nil
ユーザーはローカル変数として定義されています。同じ方法でユーザーを再利用できますが、他の方法では使用できません。
@userはインスタンス変数です。あなたは他の方法でもそれを使うことができます。ユニットテストで
class SomeClass
def first_method
user = User.new
@user = User.new
end
def second_method
# ..
# You can use @user here.
# But user is undefined in this method.
end
end
'@ user'はクラスのグローバルインスタンスのようですか? –
[@user]はインスタンス変数です。インスタンス自体ではありません。 そのクラスの各インスタンス(オブジェクト)には[@user]が1つあります。クラスの同じインスタンス内のどこからでもアクセスできます。 –
[このポスト](https://stackoverflow.com/questions/3757481/rails-local-variables-versus-instance-variables)で戦利品を取ります。おそらくそれはあなたを助けるかもしれません –