私は現在、このコードに苦労しています
@play = current_user.playlist.find_by_id(params[:id])
とはcurrent_user.playlist.find_by_id()
どういう意味ですか? このコードをトレースして current_user、プレイリスト、および find_by_id() 関数を見つけるにはどうすればよいですか?
私は現在、このコードに苦労しています
@play = current_user.playlist.find_by_id(params[:id])
とはcurrent_user.playlist.find_by_id()
どういう意味ですか? このコードをトレースして current_user、プレイリスト、および find_by_id() 関数を見つけるにはどうすればよいですか?
その場合は、現在ログインしているユーザーであるcurrent_user
クラスのインスタンスを返します。User
またはnil
、ログインしているユーザーがいない場合。
playlist
は class で定義されたメソッドUser
です。このクラスは にありますapp/models/user.rb
。通常、このメソッドは次のように定義されます。
has_one :playlist
また:
belongs_to :playlist
find_by_id
は Rails によって class に対して定義されたメソッドであり、User
これはファイルに直接表示されません。次のようなものがある場合に作成されます。
class User < ActiveRecord::Base
ActiveRecord::Base
より多くのメソッドを作成します。
文の各部分を印刷します
p current_user
p current_user.playlist
p params[:id]
p current_user.playlist.find_by_id(params[:id])
私のサーバーコンソールで結果を確認すると、これらのうちどれが最初のものかを見つけることができますnil
.
Ruby ではすべてがオブジェクトであり、オブジェクトにはメソッドがあります。オブジェクトにも型があります。
トップレベルのオブジェクトはcurrent_user
. これはあるクラスのインスタンスですcurrent_user.class
。のインスタンスであることがわかると思いますUser
。
User
したがって、 yourが定義されている場所を見つけます。これは、 で定義されたモデルである可能性がありapp/models/user.rb
ます。このモデルは、いくつかの属性と関連付けを指定します。この場合、has_many :playlists
関連付けがある可能性があります。User
これが行うことは、インスタンスと多数のインスタンスの間の関連付けを設定することPlaylist
です。ユーザー インスタンスを指定すると、user_instance.playlists
この関連付けにアクセスします。モデルPlaylist
にはuser_id
、プレイリストをユーザー レコードに関連付けるフィールドがあります。関連付けの詳細については、関連ドキュメントを参照してください。
最後に、この関連付けには、Rails の多数のメソッドが含まれます。find_by_id
ActiveRecord には、メソッド名に基づいて検索対象のフィールドを推測するなどの「魔法の」ファインダーと同様に、ファインダーの標準セットがあります。find_by_id(params[:id])
のようなものと機能的に同等ですがfind_by(:id => params[:id])
、もう少し英語っぽいです。これについては、ドキュメントの Dynamic Finders メソッドで詳しく読むことができます。
find_by_id
user_id
は、一致するのID を持つ、その ID を持つプレイリスト レコードを見つけるために必要な SQL を生成しますcurrent_user
。一致するレコードが見つかった場合、取得したデータを使用してプレイリスト レコードをインスタンス化し、それを返します。一致するレコードが見つからない場合は、nil を返します。