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の場合も同じやり方なのか。ただしテーブルを使ってないので、登録フォームのやり方はおいといて、こういうのやり方でできるのかなあ。

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

0 件のコメント: