ラベル Rails の投稿を表示しています。 すべての投稿を表示
ラベル Rails の投稿を表示しています。 すべての投稿を表示

2008年12月16日火曜日

読めるかも

どうしてもテーブルを実行時に生成したいので、google("rails 実行時にテーブルを作る")といい加減にググってみたら、railsでwikiクローンを作るというページがヒット。

http://tam.qmix.org/wiki/Minki01.html

まだ02を読み終わった段階ですが、何も知らなかったころと違い、スラスラ読めるのが驚きです。

2008年11月28日金曜日

再び、Rails本

MashupEXの設計が進んでいくと、具体的な実装ということに当然なってくるわけですが、ここでRailsをかじった気になって、後の細かい小技は逆引き本で、なんて生意気な行動に出てしまいました。余計わからなくなりそうだったので、一旦Rails本に戻って第23章です。web v2.0とvがついているのがこの本を買うのを躊躇した点の1つです。ま、どうでもいいことでしたね。本質をちゃんと見ようとしない悪い癖です。反省。。

逆引き本も、ああこういうのがあるんだ的な、馴染むという点では、あながち悪い物では有りませんでした。もう少しレベルアップするか、行き詰まって藁をも掴む場合には、また手に取ることができるでしょう。1週間以内には到達したいです。それじゃ遅い?

2008年11月23日日曜日

RoRアプリケーションの配備 (2)

ちょっとエントリーの順番が前後しちゃいましたが、最近デプロイの話を聞いてから、Netbeansを使っていることもあり、ついついJRubyやGlassFishに頭が向いてしまいます。ネイティブRubyをGlassFish V3で動かす記事もあるので、やってみたいのはやまやま、ついそっちを除いてしまうのは分かるんですが、ぐっとこらえて、まずはローカルで動くようにしましょう。

モデルの作成

データベースの格好は何となくまとまってきました。さてそこでモデルですが、考えてみると、adminやstoreというモデルの単位がはっきりしない頭。まあ、深く考えずにいきましょう。

2008年11月21日金曜日

RoRアプリケーションの配備

NetBeansを触っていると、一見、JRuby+GlassFishだと配備も簡単そうに感じたんだけどそれはなぜ?
http://blogs.sun.com/mingzhang/entry/jruby_rails_with_jpa_onとか見ると、めんどくさそうだよ?

クックパッドさんはcapistranoを使ってるそうです。う〜ん。いずれはJRuby+GlassFishへ。Javaにしたいから。

と思ったら、ここにV3での配備についての記述を発見。が、サーブレットの呼び出し? それは今要らない。

あとはこういうのもある。

なんか、違うねえ。

もっとこう、普通にRubyをJRuby+GlassFishで使いたいだけなんだけどね。「だけ」っていうのが怪しい。

RoRセミナー

昨日、ウェブキャリアさん主催のRoRセミナーに2ヶ月連続で参加させて頂きました。

すごい人です(た)。

今回はクックパッドさんの橋本さんが、クックパッドについて、哲学を語ってくださいました。リクルーティングの一環ということもあったようですが、それにしてもすごい人。懇親会ではさながら橋本詣のような長蛇の列。私も最後の最後にご挨拶だけさせて頂きました。質問コーナーでは私が前から気になっていた、埋没される投稿コンテンツについて、クックパッドさんでは検索の工夫などにより、ロングテールになっていて、結構くまなくアクセスされるようになっているとのことです。アクセス解析的なスタッツが見えるのかどうか知りませんが、コンテンツを提供されているみなさん、これからもどんどんアップしましょう! みんな見てますよ〜。(かな?)

と、ここで実はすごい偶然が。「すみません、お隣よろしいですか?」と声をかけてきたのは、MA4で一度ご挨拶させて頂き、その後ご丁寧にメールまで頂いた方。混雑してきた会場のため、3人がけのテーブルの真ん中に後から来た人が座っていくという状態での出来事でした。帰りも別々に出たのですが、偶然地下鉄のホームで再会:)。渋谷まで楽しい会話をさせて頂きました。ショートムービー、ぜひやりましょう。

そういえば、cafe2.0企画の中に、ドキュメンタリー制作というのもあったことを思い出しました。ハリポタの作者よろしく資料メモをファイルボックスに入れとくんだったか。

2008年11月19日水曜日

HanKo :WEB印鑑作成APIに学ぶ

ウェブキャリアさんのWebAPI『Hanko』を試しに使わせて頂きました。HTMLのタグを貼るだけ、超カンタン。色も色々あるみたいで、とってもGoodですね〜。

なのですが、何にも分かってない私はimgタグのsrcのurlにパラメータが書かれているのを見て「あれ。これrailsだとどうするの?」と。で、そもそもrailsの場合(私わかってないかもしれないので間違ってたらご指摘ください)/で囲ってパラメータを指定してるので、この?name=高橋&size=50&type=maru&color=red"というつなぎ方が分からない。。。
ということでググり方も全然ダメで、当てもなくrails本をめくっていくと、結局URLの解釈について第20章でルーティングとURLということで、書いてあって、ここを何度か行ったり来たりしているうちに、「あ、railsはhanko/img/name/50/maru/redじゃね?」と。ここでhankoはコントローラ、imgはアクション、name,50,maru,redがパラメータ(コントローラ、アクション名は今テキトーに付けました)。これにそってconfig/routes.rbにmapを追加すればいんでしょ?

なるほど、きっとそうだ、そうに違いないと。
なんかブラウザのURLって普通に&とか?とか書いてあるし、いろんなWebAPIのパラメータみてもだいたい?とか&で繋がってるし。これってきっとなんか他のフレムワク用なんだろうと勝手に思い込みして解決というか問題先送りします。間違ってたら恥ずかしいね。。でもしょうがない。

と思ったら、そうだ食べログ見てみようと。で、いろいろアクセスしてみると、あれ、?&だ。あ〜そういえば、formとかって確かブラウザがID=値で送ってくるよね?あれのこと?

じゃあ登録フォームと同じじゃん。どれどれ。
<input name="commit" type="submit" value="Create" />
これ、どうやってんだっけ? rails本をめくると、書いてない。。なんだよ〜productのデータチェックで騙された感じ? どうやって処理してるんでしょ〜か、railsさん。また振り出しだ。

でいろいろググって見ると、こんな親切なページがあって、もう一度adminページのブラウザ上のソースを見ると、
<p><label for="product_title">Title</label><br/>
<input id="product_title" name="product[title]" size="30" type="text" /></p>

<p><label for="product_description">Description</label><br/>
<textarea cols="40" id="product_description" name="product[description]" rows="20"></textarea></p>

<p><label for="product_image_url">Image url</label><br/>
<input id="product_image_url" name="product[image_url]" size="30" type="text" /></p>

<p><label for="product_price">Price</label><br/>
<input id="product_price" name="product[price]" size="30" type="text" value="0.0" /></p>

<p><label for="product_special">Special offer</label><br/>
<input id="product_special" name="product[special]" size="30" type="text" /></p>

とある。で、コントローラのメソッドとして、
def create
@product = Product.new(params[:product])
if @product.save
flash[:notice] = 'Product was successfully created.'
redirect_to :action => 'list'
else
render :action => 'new'
end
end
となっている。つまりproductが配列になっているということだが、どこでProductクラスのメンバとしproduct_title などが作られているのか? それらしい名前があるのはマイグレーションしかない。ということは、newのパラメータparams[:product]でブラウザから受け取ったパラメータが渡り、このパラメータで指定された名前のカラムがproductsテーブルにあるかどうかチェックしてるってことか? う〜ん。なんだかなあ。要するに最初の疑問はimg src="hoge?=a=1&b=2"っていうのがどう渡るのかということで、submitの時も同様な形式だとすれば、img srcの場合も同じやり方なのか。ただしテーブルを使ってないので、登録フォームのやり方はおいといて、こういうのやり方でできるのかなあ。

とりあえず必要になったときにやります! 今はここまでということで。

2008年11月18日火曜日

jester

ここ。

JavaScriptでサーバサイドのDBをRESTで扱うためのライブラリ、かな?

yahoo!ニューストピックスAPIのレスポンスのスキーマをどう扱えば良いかという問題で、rubyで探していたが、ふとJavaScriptで出来ればブラウザだけでできるじゃないかということに気づいたかどうかは知らないが、JavaScriptでRESTのXMLを扱うライブラリを探していたらJesterがそれとなく出てきた。良さそうな代物に見えるけど、大々的にググられるわけじゃない辺りがどうなの?

ところで肝心なこのニュースのレスポンスには対応するXMLSchemaが定義されて公開されているが、実際のデータ(レスポンス)をこのスキーマで検証する方法は? ということで、こちらをこれから拝見しようかと思っているところ。

つづく。

2008年11月17日月曜日

railsでリレーション

ファミリテーブルはディレクトリと本体に分かれる。ノードのオバケだ。だからこそ自分でリストDBを(最終的には)作るわけだけど、RDBで別に王道を行くつもりはないので、まずできるところから。

ググ(Rails テーブル リレーション )ってみるとこんなきれいなページが検索トップに。これからみるところでブックマーク代わりに。

って読みながら「なるほどx2と」マーカーしたりコメントつけたりしたい訳ですが、はて?FireFoxのプラグイン?どっかで見たような気が。

そういうのいちいち探すとめんどくさいので、サイトに1行JSを追加するだけで、できるといいのにね。そしたらブログのデフォルトONにしておけば、流行ると思うね。できると思うし。DOM見てツリーのパスとカーソル位置ってわかるのか?でもクリップしてるんだからね、きっと何か方法あるんだよ。ブロガさん側もどこが注目されたか詳細にわかってよろしい。問題は保存場所だな。サーバに置きたくないなあ。本文はローカル(cookieか保存ファイルを指定)、ポイント(URI---これってカーソル位置まで指定できるんだっけ? でも出来なかったらURIじゃないんじゃないの?)はサーバに。しょうがないか。まいいや、この話はまた今度。


2008年11月14日金曜日

読み返し

ここらで以前に読んでいた本を今読むとどうなのか、読んでみました。

まずRAILS OF RUBY ON RAILSという、真っ黒ベタに白抜きの文字の本。私にはこのインクが肌に合わず、途中わざわざコピーを取って読んでたのですが、内容はもっと分からないものでした。今見ると「何が足りないのか」よく分かります。もちろん全部はまだ読めませんけどね。私にはデモ本もしくは1つのTipsあるいは逆引き、ですが、この本で理解出来てしまう人は凄いですね。ただ後半のCASE STUDYの特にインタビューは、サイト作ってる方や運営している方々の生声、興奮が伝わってきて良いと思います。

こういう路線ならCUT(雑誌)みたいにすればいいのに。余計なお世話です。せめてもう少しインクや製本(ページがほつれやすく、一部ページがはがれてきました)をなんとかしてほしかった。

10日でおぼえるRuby on Rails入門教室。これは出だしから好きで、なかなか良い本だと思うのですが、私の思考回路に多分合わないのでしょう。なのに出だしが良かっただけに、これで頑張ればと無理に固執しすぎたのは間違いでした。やはりある程度仕組みを理解できないと、覚えられないというか、頭に入ってこない。ちょっとしたことなんですけどね。いろんな本を読みましょう。

ということで、不満は多々あるものの、基本的に今のところRails本で行きたいと思います。

が、このままDepotをやっていても自分にとって得策ではないような気がしてきました。不満の多くはMVCとしての実装や、仕様と実装に対する考え方の差によるもので、一重に自分のWebアプリの経験不足と、逆に他の開発の仕事の経験値だと思います。

ギャップが埋まった訳では有りませんが、ギャップが見えてきて、埋めていく手がかりが掴めてきたと思います。であれば、まずは自分の考えに基づいて、自分自身のアプリケーションをもうRails化した方が良さそうです。その上でDepotと比較し、または後半のRails詳細へと入っていく、そんな方法に変更してみます。

とはいえ、MashupEXのアウトラインとコンセプトは明確なので、Depot式にイテレーションしながらやっていってみようかと思います。

ただ、私はイテレーションが大嫌いだと思います。でもここまでせっかく無理してきたんですから、最後まで無理してでもやり遂げたい。だからどこまでイテレーション出来るか分かりませんが、がんばります。あ、がんばりますはダメなのか師匠、すみません。やります。やり遂げます。よろしくです。

2008年11月13日木曜日

P128 誤植?

図10.1 で、コード上は『Name:』になっているが、フォームイメージの中では『名前:』に翻訳されているので、一瞬、対応関係が分からない。

P124 誤植?

欄外*1の1〜2行目、『外部キーのようなデータベースレベルでの制約の指定にはあまり気が使われません。』

気が使われないって、どういうこと? どういう関係なの? 気功師?

自動的に外部キー制約をモデルに追加するプラグインもあるそうだが、そもそも外部キー制約って何か分かってないことに気づき。
CreateLineItemsとLineItem?

そっか、CreateLineItemsはマイグレータ(こういう言い方は怒られる?)だっつうの。む〜ん。どうせならモデルからマイグレーションできればいいのに。ま、違うんだろうなあ何か。

ここで書きたかったのは、マイグレーションはモデルとは別ということをしっかり頭に叩き込むということ。

テーブル構成というかDBの作り方

これをみると、品目のテーブルがline_itemか。何で最初のマイグレーションに個人情報しか入ってないのか。余計混乱。流せ流せ。

品目を1個のテーブルにして、そこに沢山の注文を全部まぜこぜにして入れるのか。なるほどね。RDBってそんなんだったけね。そうそう、何かテーブルのキー寄りの項目が同じ行が沢山並んで、最後の方だけユニークになってんだよね。それ(前半部分の同じ値)がどうにも無駄に見えてしょうがなかったのを思い出しました。あれってなかなか消化できないんだよね。当時はdosの時代でmifes系のエディタを使っていたので、矩形でカットしたい思いに駆られたものです。今は大丈夫。

でも何か分かってきて楽しい。executeの呪文も今は無視してみよう。

品目って何?

P125を読んでるだけだとよくわからなかったので、"注文 品目"でググると、注文品目というフォームがあった。幕の内弁当、2個。なるほど、俺の頭でいう明細のことか。

p114 誤植?

トラブルシューティングの3つめ。『テストで混乱がうまくいかない』

廃れつつあるコンポーネントって?

P107(第9章)の*1にコンポーネントを使う方法が有ると書かれている。これじゃない?俺がほしいのは。と思って22.9(p476)を軽く読んでみると、どうも違うようだ。

ところで、p476には、ショッピングカートが自己完結したアプリケーションではなく、ショップの基盤となるコンテキストの一部だという内容のことも書いてある。果たしてそうだろうか。Rails流にはそうなのだろう。でも私はユニバーサルカートというアイディアを捨てたりはしない。これ(ユニバーサルカート)もずいぶん古いアイディアだが一向に実現しようとしない行動力の無さには、呆れることすらできない。

2008年11月12日水曜日

カートのリストの順番が入れ替わる?

これも何か再現しない。む〜ん。まいっか。そもそも実践で使うかどうかもわからないわけだし。ただなぜここに書くかというと、悩んだ履歴を残しておきたいから。

なんだこりゃ? flush[:notice]を使うと、カートが壊れる?

そうではありません。さっき追加したrescueのelseが抜けていたせいでした。。。

flushを外しても同じだが、cookieを消すと直るので、確かにカートを何か壊している。でもflushじゃない、、とその下にあ〜elseがないじゃないか! XXXXが。すいません。

rake db:sessions:clearがうまく動かない?

P95のようなエラーが出る。CartItemを修正したからだと思う。そこで、rake db:sessions:clearを実行したが、うまく動いていないのだろうか。こんなメッセージ。

(in /Users/Home/Documents/Rails/Depot)
Gem::SourceIndex#search support for String patterns is deprecated
/Users/Home/Documents/Rails/Depot/config/boot.rb:20 is outdated

とりあえずまたブラウザのcookieを消して対応。cookieを消したらうまくいきました。