チュートリアルを書いてみました

1 view
Skip to first unread message

AMUAMU

unread,
Sep 2, 2008, 11:42:38 AM9/2/08
to Akelos-ja
Akelos-jaの皆さん、こんばんわ

英語の動画のみのBlogチュートリアルを、自分なりに解釈・編集してテキスト版を作ってみて、さらにユーザ認証を足すところまでチュートリアルを書い
てみました。
稚拙な文章ですが・・・

最新ソースにしかないActionMailerを使っちゃってますが、新規ユーザの方々の参考になれば幸いです。

一応、確認などはしたつもりですが、何かお気づきの点あればご指摘下さい。

Akelos PHP Blogチュートリアル一覧(全18記事) http://akelos.seesaa.net/article/105925408.html

Akelos PHP ユーザ認証チュートリアル一覧(全19記事) http://akelos.seesaa.net/article/105925323.html


AMUAMU

YUJI TANAKA

unread,
Sep 2, 2008, 3:28:46 PM9/2/08
to akel...@googlegroups.com
たなかです。

これはすごいですね。
ぜひ読ませていただきます。

これを読んだ人がアプリを作って、その解説記事がまた増えていくと
ユーザが増えてもっと楽しくなるだろうなー。

2008/09/03 0:42 AMUAMU <amu...@gmail.com>:

suna...@gmail.com

unread,
Sep 4, 2008, 8:43:53 PM9/4/08
to Akelos-ja
皆さんはじめまして。
昨日からAkelosを始めたばかりの初心者です。
英語動画を見ながら進めている途中ではまっていて、調べていたらここにたどり着きました。
動画よりも補足が多くて参考になります。

AMUAMUさんのサイトを見てわかったんですが、私がはまったのは、コメントの表示で

$this->post =& $this->Post->find(@$this->params['id'],
array('include' => 'comment'));

を指定しないとコメントが表示されない事です^^

動画だとbelongs_toとhas_manyを設定して、show.tplを修正した後、ブラウザーをリロードするとコメントが表示されていたのが
謎なんですが・・・


AMUAMU

unread,
Sep 4, 2008, 11:08:47 PM9/4/08
to Akelos-ja
suna4903さん、 こんにちわ

Blogチュートリアル、確かにコメントの表示のところでハマリますよねー
助けになったようで良かったです

>動画だとbelongs_toとhas_manyを設定して、show.tplを修正した後、ブラウザーをリロードする>とコメントが表示されていたのが謎なんですが・・・

確かに謎。自分はRoR詳しく無いんですが、ここらへんの挙動ってどうなんでしょうね。誰かご存知の人いらっしゃいます?

まぁ、毎回参照してSQL飛ばすと重いですし、includeによる先読み指定のほうが良いとは思うんですが。

-------------------------------------
AMUAMU
http://akelos.seesaa.net/
-------------------------------------

YUJI TANAKA

unread,
Sep 5, 2008, 2:31:05 AM9/5/08
to akel...@googlegroups.com
たなかです。

find() にinclude をセットしないで left join が自動的に行われるってことはないと思いますよ。
railsも同じはず。
動画は編集なのか、開発中のAkelosでのヒトコマだったのかな。
謎ですね。

AMUAMU

unread,
Sep 5, 2008, 2:27:13 PM9/5/08
to akel...@googlegroups.com
AMUAMUです。

やっぱり明示的にセットするのが普通ですよね。
ほんと動画は何なんだろう・・・

本家フォーラムの過去ログでも何回も同じような質問が出ているようです。
やっぱり答えは同じようですが、本家フォーラムでinclude使うパターン以外に

$post = $this->post->find($this->params['id']);
$post->comment->load();

なんて回答もありました。→ http://forum.akelos.org/discussion/268/
※自分では試していません。

どちらにしろ動画とは違いますが:-)

takedasoft

unread,
Sep 5, 2008, 2:53:31 PM9/5/08
to Akelos-ja
こんばんわ、武田です。
チュートリアルすばらしいですね。

Railsだと、
@post = Post.find(1) # select *from posts where id=1
@post.comments # select * from comments where post_id=1
と、コードを書く毎に裏でSQLが走ります。(遅延ロード)

Akelosだと、
$this->post = $this->Post->find(1); //select * from posts where id=1
$result = $this->post->comments; // 何も起こらず、$resultはFALSE。
$this->post->comment->load(); // select * from comments where
post_id=1
$result = $this->post->comments; // $resultに結果が入る

となります。PHPの言語仕様上、遅延ロードはできないので、
明示的に関連データをロードする必要があります。

以前私も悩んでエントリに残しているので、もしよろしければご一読ください。
http://blog.takeda-soft.jp/blog/show/206

RailsもAkelosも、includeオプションを指定した挙動は同じです。
スクリーンキャストは見てないので、なんとも言えずすみません。

それではまた。

suna...@gmail.com

unread,
Sep 5, 2008, 9:16:04 PM9/5/08
to Akelos-ja
武田さんこんにちは。
ブログはよく拝見させて貰ってます。
実はAkelosを知ったのも武田さんの記事でした。

コメントのところは、やっぱはまりやすいポイントだったんですね。
動画をよく見たら、次のシーンでincludeに書き換わっていました・・・
動画っていうのは雰囲気を見るにはいいですが、勉強するには文字ベースの方が楽ですね^^

AMUAMU

unread,
Sep 6, 2008, 12:40:12 AM9/6/08
to akel...@googlegroups.com
>動画をよく見たら、次のシーンでincludeに書き換わっていました・・・

あら、チュートリアル作るときに結構見たのに、私も見逃していた・・
動画は編集だったのかー

武田さんの答えで個人的にも、すっきりしました。ありがとうございます。

RailsクローンというAkelosの面を強調するならばload指定をして遅延ロードっぽくするのが正しい気がしますね。
PHPのFramework的には、1行で済む方includeのほうが美しいってイメージがあります。

実務面も気になって、実際にSQLレベルでログを確認してみました。

※includeの場合
SELECT __owner.id AS __owner_id, __owner.title AS __owner_title,
__owner.body AS __owner_body, __owner.updated_at AS
__owner_updated_at, __owner.created_at AS __owner_created_at,
__owner.posted_at AS __owner_posted_at, _comments.id AS _comments_id,
_comments.body AS _comments_body, _comments.post_id AS
_comments_post_id, _comments.updated_at AS _comments_updated_at,
_comments.created_at AS _comments_created_at FROM posts AS __owner
LEFT OUTER JOIN comments AS _comments ON __owner.id =
_comments.post_id WHERE __owner.id = 1

※find & loadの場合
SELECT * FROM posts WHERE posts.id = 1
SELECT * FROM comments WHERE comments.post_id = 1

となります。

どっちも正しいわけですし、どっちを使うかはアプリケーションの実装によったり、SQLサーバによったり、好みの問題なんでしょうけど、find &
load のほうがログレベルでは美しい(見やすい)ですね(^^;

Reply all
Reply to author
Forward
0 new messages