1. ホーム
  2. ruby-on-rails

[解決済み] Rails: パーシャルにローカルを渡す構文に戸惑う

2023-01-17 18:11:14

質問

パーシャルのレンダリング(およびそれにローカルを渡すこと)に関して、Railsのquot;magic"を理解しています。

なぜこれが機能するのか。

<%= render "rabbits/form" %>

そしてこの作品。

<%= render "rabbits/form", :parent => @warren, :flash => flash %>

が、これは ではなく が働きます。

<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>

しかし、これはそうです。

<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>

あと、S.O.で人に迷惑をかけないように、このニュアンスを調べるにはどうしたらいいでしょうか?

どのように解決するのですか?

簡単に言うと、レンダーメソッドは、最初に渡された引数を見ます。ハッシュを渡した場合(これには :partial => 'foo', :locals => {blah blah blah} を含む) を渡すと、すべての引数をハッシュとして渡し、それに応じてパースします。

最初の引数に文字列を渡した場合、最初の引数を部分名とみなし、残りをローカル名として渡します。しかし、その後の呼び出しで、実際に割り当てられるのは :locals => your_locals_argument を割り当てますが、これはこの場合 :locals => {locals hash} ではなく {locals hash} で終わる。 :locals => {:locals => {locals hash}} ではなく :locals => {locals hash} .

ですから、私のアドバイスは、いつもいつも同じ方法で明示的に値を渡すようにすれば、問題は起きないということです。このことを学ぶために、私は直接コードそのものを見に行きました ( actionpack/lib/base.rb , render() というメソッドがありますが、Rails 2の場合です。Rails 3は違います)。いい練習になりますよ。

さらに、SOで人に迷惑をかけることを心配する必要はありません。そのためにこのサイトが存在するのですから。私はこれで何かを学びました。