4

8.2.3章で説明されているように、必要な割り当て機能を理解するのにひどい時間を過ごしています。Hartlのチュートリアルの。

コンテキストとして、彼は次のsign_in関数の2行目に焦点を当てています。

  def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user #<-- this line
  end

割り当てのために彼が言及する場合、それは個別に次のように定義する必要があります

def current_user=(user)
    @current_user = user
end

メソッドがへの割り当てcurrent_user=処理するように明示的に設計されている場合。私の混乱は次のとおりです。current_user

  1. なぜこれが必要なのですか?=シンプルで割り当てられると思いました。例えばuser.email = hello@kitty.com

  2. また、最終的に彼がコーディングするときredirect_to current_user、getに属するものはどのようにSessionsControllerによって制御されるビューに変換されUsersControllerますか?

ありがとう!!

4

1 に答える 1

5

その理由は、メソッドの呼び出しと変数の割り当ての間の(インタープリター/ VMの)混乱を避けるために必要です。

def foo
  # Two completely different things!
  bar = "baz" # assigns baz to local variable bar
  self.bar = "baz" # invokes the bar= method with parameter of baz
end

そこで起こっていることは、彼が2つのことをしているということです。まずcurrent_user=、ユーザーオブジェクトを使用してメソッドを呼び出し、次に、それをに設定します@current_user(これは、良い例ではありません。実際の生活では、current_user=セッション変数の設定などの方法)。

2番目redirect_to current_userは同等です-redirect_toが取ることができるさまざまなパラメーターの種類を説明する詳細については、http://api.rubyonrails.org/classes/ActionController/Redirecting.htmlredirect_to user_path(current_user)を確認してください。これはリダイレクトであり、レンダリングではないことに注意してください。したがって、2番目のHTTPリクエストがここで発生します。

于 2012-12-19T01:27:09.340 に答える