fc2ブログ

2023.08 «  - - - - - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 » 2023.10
TOP > partial パーシャルな関係【partial と object】

 ← unit test ユニットテストの準備 | TOP | layout ファイルについて・その3【細かいオプションとか】

partial パーシャルな関係【partial と object】 

2007年08月14日 ()
今日は

layout ⊃ template ⊃ partial

のうちの template ⊃ partial の関係を見ていきたいと思います。

ちなみに layout ⊃ template の関係を見たいひとはこちらからどうぞ。

template ファイルの中で、render(:partial ... を使えば、画面表示の一部分(partial)を共通に使い回すことができます。

平たくいうと、template が partial を使い回すということです。

早速例をみてみましょう。

app/controller/galileo_controller.rb というコントローラに

class GalileoController < ApplicationController
  def list_males
    @my_males = Person.find_all_by_gender("m")
  end

  def list_females
    @special_title = 'ドキっ!女だらけのドンドンヒャララドンヒャララ'
    @my_females = Person.find_all_by_gender("f")
  end
end



と定義されていて、app/views/galileo/list_males.rhtml テンプレートファイルと app/views/galileo/list_females.rhtml テンプレートファイルで、partial ファイルを共有することにします。
app/views/galileo/list_males.rhtml

男祭りじゃ<br />
<%= render(:partial => "people",
           :object => @my_males)
           %>



app/views/galileo/list_females.rhtml

女祭りよ<br />
<%= render(:partial => "people",
           :object => @my_females,
           :locals => { :sub_title => @special_title }) %>




どちらも :partial => "people" と指定しているので、people という名前の partial ファイルを読み込んできます。

じゃあ、partial ファイルはどこにどういう風に置いておくの?という疑問があると思いますが、それは、template ファイルと全く同じディレクトリの中です。

上の例ですと、app/views/galileo/ ディレクトリの中ということになりますね。

ただ注意するのは、ファイル名の一番最初に _ アンダースコアを付けます。

上の partial ファイル名は people という指定だったので、_people.rhtml となります。

例えば _people.rhtml ファイルの中身は、

<%= sub_title %>
<% people.each do |person| %>
<%= person.id %><br />
<% end %>



こんな感じになります。

上の template ファイルで render しているときの引数ですが、

:object には、partial ファイルの中で partial ファイル名と同じ名前の変数として参照できるオブジェクトを指定します。

:locals には、その他 partial ファイルに渡したい値を指定します。

上の例ですと、partial ファイル(_people.rhtml)で使っている変数 people の中身は、@my_males だったり @my_females だったりします。

その他、sub_title という変数も partial ファイルで使っていますが、こちらは女祭りのときだけ @special_title の中身が入っています。

男祭りの時は、何も値が入っていませんから、空文字が表示される、ということになります。

なかなか面白いですね。

【広告】

[2007.08.14(Tue) 18:13] RubyOnRails(View・ERb)Trackback(0) | Comments(0)
↑TOPへ

 ← unit test ユニットテストの準備 | TOP | layout ファイルについて・その3【細かいオプションとか】

COMMENT

COMMENT POST















管理者にだけ表示

 ← unit test ユニットテストの準備 | TOP | layout ファイルについて・その3【細かいオプションとか】