<— チュートリアルステップ4 / チュートリアルステップ5 | チュートリアル | BasicRelationalのチュートリアル —>
チュートリアルステップ3で生成したビュー(ビューを理解するを参照) app/views/friends/view.rhtml
を変更してください。好きなエディタでこのファイルを開いて、次のように変更してください: (もし、創造的側面が駆り立てるなら、遠慮なくHTMLで装飾してください)
<html> <body> <h1>Friends#view</h1> <p>This page will display one friend</p> <p> <%= @person.name %><br /> <%= @person.street1 %><br /> <%= @person.street2 %><br /> <%= @person.city %><br /> <%= @person.state %><br /> <%= @person.zip %><br /> </p> </body> </html>
動的なコンテンツをどのように出力しようとしているか注意してください。@person
オブジェクトはコントローラオブジェクトによって生成されなければなりません。そこで、app/controllers/friends_controller.rb
を開いてください。
メソッドがすでに生成されていることに注意してください。
viewメソッドを探し、それを次のように置き換えてください:
def view @person = Person.find(1) end
これは、データベースから出力された最初のレコードを取得し、それをviewが利用できるように@person変数に格納します。
さて、モデルクラスをより注意深く見る必要があります。そこで、app/models/person.rb
を開いてください。チュートリアルステップ4で、new_modelスクリプトを実行したときに生成されたスケルトンクラスを見るでしょう:
class Person < ActiveRecord::Base end
Personクラスは\ActiveRecord::Baseのサブクラスなので、すでにほとんどの作業は完了しています。たとえばaccessorメソッドは動的に生成されるので、それを自分で書く必要はありません。
このクラスは、作成したpeopleテーブルとの対応をどのようにして知るのでしょうか?ActiveRecordはクラス名を複数形にし、データベース中のその名前のテーブルを探します。ActiveRecordがこれを行うためのルールは、この文書で述べられています。
Apacheをセットアップするために、Railsを始めるのすべてのステップを実行したか確認してください。この代わりに、次のようにしてWEBrickサーブレットを実行することがでることに注意してください:
ruby script/server
または
./script/server --environment=production for production environment under *nix
ブラウザでhttp://RAILS/friends/view(ここでRAILS
はホスト名とrailsをインストールしたベースURLのパスです)表示すると、動作中のアプリケーションを見ることができるでしょう! URLの中にコントローラ(friends
)とアクション(view
)の両方を含ませる方法に注意してください!
BasicRelationalのチュートリアルに進む | チュートリアル
または、スキップしているなら チュートリアルステップ5 (テスト)
display
はview
に変更しました。show
も別名のひとつですが、これは後のチュートリアルで扱います。
model :friend
の追加がここから削除された理由について、誰か知りませんか? 単に私がrailsの古いバージョンを使っていて、新しいバージョンでは自動的にこの行を追加するのでしょうか? gemによる、と私は5月5日現在のカレントバージョンを使っています。model :friend
は、セッションの参照を維持するためのモデルの宣言に使われているように見えるので、必要のないところで複雑さを増すだけだと思います。その件についての更なる議論はモデルメソッドを使う場合を参照してください。
friends/display
’wを表示させようとしたとき、次のようなエラーダンプが出力されました:
" Showing /friends/display.rhtml where line #6 raised undefined
method `name' for nil:NilClass
3: <h1>Friends#display</h1>
4: <p>This page will display one friend</p>
5: <p>
6: <%= @person.name %><br />
7: <%= @person.street1 %><br />
8: <%= @person.street2 %><br />
9: <%= @person.city %><br />"
@person
はnilですが、いい考えがありません。チュートリアルに従っており、データベースクエリはコマンドラインで機能しています
返答: これは、viewがdisplayと呼ばれているからです。これと適当なビューファイルを別のもの(たとえばdisplay2とisplay2.rhtml)に変更すれば、適切にロードされたページが表示されます。わりあい普通のGotchaです。
返答の返答:これで正しく動作しました: apps/controllers/friends_controller.rbを編集し、
‘def display’の行を‘def display2’に変更。それから、app/views/friends/display.rhtmlファイルをapp/views/friends/display2.rhtmlにリネームする。これで動くはずです。
返答:http://localhost/public/friends/viewへのアクセスを試してください。
返答:http://localhost/public/friends/viewもうまくいきませんでした(少なくとも私のところでは)。Windowsでは、私がしなければいけないことは%SystemRoot%\system32\drivers\etc\hosts
を編集し、“127.0.0.1 rails”の行を追加することです(ここで railsは、httpd.confのVirtualHostエントリのServerNameです)。
返答: vhostの設定の中のすべてのパスが正しくセットされていることを確認してください。
Errno::ENOENT in Friends#view
No such file or directory - /tmp/mysql.sock
RAILS_ROOT: ../config/..
Application Trace | Framework Trace | Full Trace
/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/vendor/mysql.rb:104:in `initialize'
...
...
...
#{RAILS_ROOT}/app/controllers/friends_controller.rb:7:in `view'
返答: database.ymlファイルを読むまで同じ問題がありました:
# Install the MySQL driver: # gem install mysql
返答:返答: 私のところでは、gem install mysqlが正しく動作しません。
Building native extensions. This could take a while...
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
カテゴリ:チュートリアル
返答:返答:
実質的には、コンパイラの問題です。正しいmysql_configを配置しているか確認してください。私はここの支持に従いました: http://ocsforums.com/printthread.php?t=132 .
コメント
畜生、なんてこった! 文字通りすべて従ったが、404 Not Foundが表示されただけだった.. 来年もう一度試します。
返信: No such file or directory – /tmp/mysql.sock
database.ymlの中に、socketパラメータを追加し、mysqld.sockの正しいパスを書く必要があります。
development: adapter: mysql socket: /var/run/mysqld/mysqld.sock database: ficha_development username: carlos password: host: localhost
私は乱雑なステートメントに賛成します。最初にそれがどんなレベルか言うべきです。仮定も多すぎます。チュートリアルは文字通り従うことが期待されています。もし私がやるなら、エラーを取得します。
Ryan Hennigのコメント
http://localhost/friends/viewを表示したときに出たアプリケーションエラーを保存しました。development.logの中身は:
Recognition failed for "/view" /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/routing.rb:488:in `recognition_failed' /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/routing.rb:478:in `recognize!' /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/dispatcher.rb:38:in `dispatch' /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/fcgi_handler.rb:150:in `process_request' /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/fcgi_handler.rb:54:in `process!' /usr/local/lib/ruby/site_ruby/1.8/fcgi.rb:600:in `each_cgi' /usr/local/lib/ruby/site_ruby/1.8/fcgi.rb:597:in `each_cgi' /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/fcgi_handler.rb:53:in `process!' /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.2/lib/fcgi_handler.rb:23:in `process!' /Users/rhennig/Rails/friends/public/dispatch.fcgi:24
前にも似たようなエラーが出ました。そこで、Tony ArnoldのページにあるRoRのセットアップの指図に従いましたが、まだ同じエラーが出ます。
Ryan Hennigのコメント
代わりにhttp://localhost/friends/friends/viewをブラウズすることでこれを解決しました。それから、tmp/sessionsのパーミッションを修正する必要がありました。