rails:3842
From: 前川 てん <somohan@h...>
Date: Mon, 15 Oct 2012 11:43:33 +0900
Subject: [rails:3842] renderメソッドの定義場所が分かりません
みなさん、こんにちわ。 先週木曜日からRailsの学習を始めています。 C/C++とPHPで数年程経験がありますが、 ルビー自体は「プログラミング言語Ruby」を読んだ程度で、 始めて1か月足らずです。 現在Rails開発のごく基本的な部分で躓いております。 書籍の記述に誘導されるまま、rails generate controller hello とコマンド実行後、作成された hello_controller.rbにindexメソッドを 追加しました。 class HelloController < ApplicationController def index render :text => 'hello world' end end このコードでhello world と表示できるようになるのは分かったの ですが、renderメソッドを持っているクラス/モジュールを知りたかった のでhttp://api.rubyonrails.org で調べてみたところ、 メソッド名での検索ができない(?)らしく、埒が明きません。 そこで自分で調べてみようと思い、以下のようなコードを書きました。 -- hello_controller.rb -- def index #自クラス名 @controller_name = self.class.to_s #自クラスがincludeしているモジュール included_modules = self.class.included_modules #自クラスが継承しているクラスを求める @ancestors = self.class.ancestors ancestor_classes = @ancestors - included_modules #各クラスのメソッド名を抽出 @ancestor_classes = ancestor_classes.map{|ac| [ac, [eval("#{ac}.class.public_instance_methods"), eval("#{ac}.class.protected_instance_methods"), eval("#{ac}.class.private_instance_methods")]] } #各モジュールのメソッド名を抽出 @included_modules = included_modules.map{|im| [im, [eval("#{im}.class.public_instance_methods"), eval("#{im}.class.protected_instance_methods"), eval("#{im}.class.private_instance_methods")]] } # "#<module>0x..." とかいう無効らしきモジュールが混入するので除去 @included_modules.delete_if{|e| e[1][0] == nil} end end -- index.html.erb -- <h1><%=@controller_name -%>classes</h1> <ul> <% @ancestor_classes.each do |ac| %> <li> <h2><%= ac[0] %></h2> <dl> <dt>public methods</dt> <dd> <ul> <% ac[1][0].each do |method| %> <li><%= method %></li> <% end %> </ul> </dd> <dt>protected methods</dt> <dd> <ul> <% ac[1][1].each do |method| %> <li><%= method %></li> <% end %> </ul> </dd> <dt>private methods</dt> <dd> <ul> <% ac[1][2].each do |method| %> <li><%= method %></li> <% end %> </ul> </dd> </dl> </li> <% end %> </ul> <h1><%=@controller_name -%>included modules</h1> <ul> <% @included_modules.each do |im| %> <li> <h2><%= im[0] %></h2> <dl> <dt>public methods</dt> <dd> <ul> <% im[1][0].each do |method| %> <li><%= method %></li> <% end %> </ul> </dd> <dt>protected methods</dt> <dd> <ul> <% im[1][1].each do |method| %> <li><%= method %></li> <% end %> </ul> </dd> <dt>private methods</dt> <dd> <ul> <% im[1][2].each do |method| %> <li><%= method %></li> <% end %> </ul> </dd> </dl> </li> <% end %> </ul> 上記のコントローラーとヴューを作成し実行したところ、一見全ての 継承クラスとinclude済みモジュールのメソッドが表示されるのですが、 「render」と名のつくメソッドが一つも表示されません。 (ブラウザの検索ツールにて確認) コードに間違いがあると思うのですが、自分では分からないので、 何かヒントでも良いのでご教示ください。 また、APIを調べるのに使い勝手の良いと思われるウェブサイトも 紹介してもらえると嬉しいです。 環境: OS:Windows7 ruby 1.9.3p194 Rails 3.2.8 よろしくお願いします。
-> 3842 2012-10-15 04:43 [somohan@h... ] renderメソッドの定義場所が分かりません 3843 2012-10-15 13:20 ┣[dezawa@a... ] 3844 2012-10-15 13:55 ┃┗[somohan@h... ] 3845 2012-10-19 08:14 ┗[ochi@c... ]