fc2ブログ

2024.11 «  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 31 - - - - » 2025.01
TOP > CATEGORY > RubyOnRails(Controller)

TOP

画面に HTML じゃなくてテキストを表示する方法 

コントローラで、普通は HTML を画面に表示するのですが、お気楽にテキストだけを表示したい、という場合、

render (:text => "honyarara")



が使えます。上の例ですと、画面に honyarara とだけ表示されます。機会がありましたら試してみてください!

【広告】

[2007.08.08(Wed) 16:09] RubyOnRails(Controller)Trackback(0) | Comments(0) 見る▼
↑TOPへ

view ファイルの拡張子の優先順位 rhtml, rxml, rjs 

2007年08月07日 ()
同じ名前の view ファイルがあったら、拡張子が rhtml, rxml, rjs の順に読み込まれますよ、という話。

通常、コントロールのメソッド名と同じ view ファイルが読み込まれますね。

例えば、↓のようなコントローラがあったとして

class LoginController < ApplicationController
  def do_login
    some_login_method
  end
end



そして、ブラウザで、http://www.example.com/login/do_login みたいにアクセスして、login コントローラの do_login メソッドを呼び出します。

そうすると、do_login メソッドの処理が全部終わると、app/view/login/ ディレクトリにある

do_login.rhtml か
do_login.rxml か
do_login.rjs

ファイルを読みに行きます。このファイルがなかったら Template is Missing エラーが出ます。

じゃあこの場合、app/view/login/ ディレクトリに、

do_login.rhtml も
do_login.rxml も
do_login.rjs も

存在する場合、一体どのファイルがブラウザに表示されるのでしょうか。

で、それは、

do_login.rhtml

です。

rhtml, rxml, rjs の順で優先順位が決まっているようです。

じゃあ、

do_login.rhtml も
do_login.rxml も
do_login.rjs も

存在するけど、とにかく do_login.rjs を最優先で表示させたい、という場合は、

  def do_login
    some_login_method
    render(:file => 'do_login.rjs')
  end



と書くことになります。

以上、太平洋に浮かぶ南国の楽園エロマンガ島よりお伝えいたしました。任天堂 wii でも発見できるらしいよ!

【広告】

[2007.08.07(Tue) 11:39] RubyOnRails(Controller)Trackback(0) | Comments(0) 見る▼
↑TOPへ

Template is missing エラー 

2007年06月28日 ()
あるあるエラーメッセージ集

Template is missing
Missing template xxx_yyy.rhtml



というエラーメッセージが表示されたら、コントローラのメソッドの名前のviewファイルが、見つからないのかな、ということを疑いましょう。

例えば、HonyararaController というコントローラクラスが、hyonyarara_controller.rb ファイルとして app/controllers の下に置いてあったとして、そのファイルの内容に

def index
  @name = 'oppappi'
end



という index メソッドが含まれていて、app/views/honyarara ディレクトリの中に index.rhtml がないと、Template is missing エラーが表示されます。

コントローラのメソッド名のビューファイルがない、っていうわけでござーます。

ただし、コントローラのメソッドの中でリダイレクトしている場合は、ビューファイルがなくてもエラーになりません。

例えば、

def index
  @name = 'oppappi'
  redirect_to :action => :index2
end



とリダイレクトされていれば、app/views/honyarara ディレクトリの中に index.rhtml がなくてもエラーがでません。なぜなら index2 にリダイレクトするからです。

この場合 def index2 ~ end の中でリダイレクトをしていなくて、app/views/honyarara ディレクトリの中に index2.rhtml がないと、やっぱり、Template is missing エラーが表示されます。

ではチャオチャオっとチャオっちゃお!バイバーイ!

【広告】

[2007.06.28(Thu) 00:31] RubyOnRails(Controller)Trackback(0) | Comments(2) 見る▼
↑TOPへ


COMMENT

テンプレートはあるのですが。。 by アリア
ビューファイルは、正しい場所にあるのですが
認識されないのかないことになっています。
どうしたらよいと思いますか?

うーん 色んな原因が考えられます by 自分
自分の経験からすると、以下のような原因がよくあると思います

1.実は正しい場所と思っていた場所は正しくなかった
2.ビューファイル名が正しくなかった
3.ビューファイル名が大文字小文字だった
4.ビューファイル名が全角だった
5.コントロールにメソッド(def)を定義していなかった
6.routes.rb で特殊なURLマッピングを定義していた

開発がんばってくださいねー。

コメントを閉じる▲

Routing Error 

2007年05月28日 ()
この段階(脱超超初心者段階)になると、Routing Error というエラーメッセージが、画面にデカデカと表示されることがあって、もーんもーんもんもんもんもん、もんもんしないで行こうケイリン!と気分は沈みがちになるのですが、Routing Error は、私のこの超短いRORの経験から察するに、

config/routes.rb に定義されている通りにcontrollerを見つけに行ったら、controllerが無かったよ、という状態ではなかろうか、と思います。

もし、このblogで初めて挑戦したように、bookというcontrollerを作ったとしたら、

http://localhost:3000/book/

てな感じでアクセスできるのですが、この状態で

http://localhost:3000/

へアクセスすると、

Routing Error

no route found to match "/" with {:method=>:get}



と表示されます。

これは、config/routes.rb に、"/"でアクセスした場合に、何のcontrollerを使ったらいいか書いてないからだと思います。

なので、例として、"/"にアクセスしたら、book controllerにアクセスしにいくように、config/routes.rbに一行書き加えてみましょう。

  map.connect '', :controller => 'book'



改めて、

http://localhost:3000/

へアクセスすると、ページが表示されるハズです。

ここで、map.connect の後の '' というのは、ルートパスへアクセスしてきたよ、という意味です。

'/' とは書かないところがミソかもしれません。

ではでは・・・

【広告】

[2007.05.28(Mon) 23:20] RubyOnRails(Controller)Trackback(0) | Comments(0) 見る▼
↑TOPへ

TOP