Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

hondana.orz

ARの関連を使ってみる

まず、usersとpossessionsの関連を試してみる。 class Possession < ActiveRecord::Base belongs_to :user end これだけ書いて、 >> p = Possession.find(:all).pop => #<Possession:0x47fa040 @attributes={"status"=>0, "id"=>747, "isbn13"=>"978415 0116231", "blog_url"=>nil, "user_id"=>100}> >> p.</possession:0x47fa040>…

JOINしてみますか

さて、一覧表示では以下のSQLでレコードを選択出来ればいいはずだ。 select A.isbn13, B.smallimage_url, C.name from db2admin.possessions as A left join db2admin.books as B on A.isbn13 = B.isbn13 left join db2admin.users as C on A.user_id = C.id…

アクセスしてみる

まず、users >> User.find(:all) => [#<User:0x480a4a4 @attributes={"name"=>"Tambourine", "id"=>100}>]books >> book = Book.find(:all).shift => #<Book:0x47d9e1c @attributes={"title"=>"驥榊鴨繝斐お繝ュ (譁ー貎ョ譁・コォ)", "aut her"=>"莨雁揩 蟷ク螟ェ驛・, "mediumimage_height"=>160, "mediumimage_url"=>"http:// ecx.images-amaz</book:0x47d9e1c></user:0x480a4a4>…

そして、generate model

modelを作る H:\Rails\hondana>ruby script\generate model Possession exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/possession.rb create test/unit/possession_test.rb create test/fixtures/possessions.yml exists d…

あらら、話が前後した

というか、新しいテーブル構造についての記事が消えた。あら?まず、テーブルの変更について、構造はこんな感じにする。 migrateを作る。まず、usersテーブル。これは簡単だ。 class CreateUsers < ActiveRecord::Migration def self.up create_table :users…

表を作り直した

isbn13の替わりにbook_idを使うことにした。 >> p = Possession.find(:all).pop => #<Possession:0x4857a60 @attributes={"status"=>0, "id"=>1071, "blog_url"=>nil, "user_id"=>100, "book_id"=>744}> >> p.user.name >> p.book.isbn13 => "9784150116231"これでOK前に示したJOINは Possession.find( :al</possession:0x4857a60>…

ARの関連を使ってみる2

同じようにbooksも設定してみる。こっちは外部キーが規約にあってないので、それも設定する。 class Possession < ActiveRecord::Base belongs_to :user belongs_to :book, :foreign_key => 'isbn13' end >> p.book.title ActiveRecord::StatementInvalid: A…

possessionsにデータ挿入

DEL形式でexportしてきたファイルをちょちょいと修正し、possessionsに食わせる元ネタを作った。3行のRubyスクリプトで(笑) 100,2,"http://tambourine.cocolog-nifty.com/dengon/2007/01/post_b527.html","9784101250236"マニュアルによると、modified ident…

マルチユーザー版のURL構造

マルチユーザー版のユーザー指定方法を考える。 (1) ログインページを作り、セッションに入れる RESTfulじゃないので却下。人のも自由に見られるのが本家本棚.orgのいいところだし (2) パラメーターでつける /hondana/midoku?user=Tambourineというヤツ。ダ…

テーブルのコピー

いよいよテーブルのをいじるので、今のテーブルのコピーを作っておこうかと思う。・・・コピーコマンドとかないのかな(笑)やはし、export/importするしかない db2 => export to books.ixf of ixf select * from db2admin.books SQL3104N エクスポート・ユー…

さすがに重い

結局、システム全体の環境変数でDB2CODEPAGEを設定してしまった。コントロールセンターが発狂したりするかなと思ったけど、そんな感じは無くて一安心。それにしても、さすがにDB2は立ち上げると重い。見ると、db2startしたら500MBぐらいメモリを持っていって…

mongrelを入れてみる

そろそろ自分用に使いながら改良していくつもりなので、サービスとして上がっていないと使いづらい。ローカルにApacheは入っているんだけど、fastCGIの設定はめんどくさそうだ。と思っていたら、mongrelがすごく楽だと言うことがわかった。 Mongrel - バリケ…

ごそっと移植

app/model/book.rbを編集もともとは class Book < ActiveRecord::Base end しか書いてなかった。これに特異メソッド定義でクラスメソッドをつける。こんな感じ class Book < ActiveRecord::Base end class << Book #ISBNから本を取り出すときにはこちらを使…

Bookクラスのファクトリーメソッド

今、booksテーブルに新しいエントリーを追加するのは/hondana/isbnに限られているのでここに新規登録の処理があるが、将来的なことを考えれば、Bookクラスに新規追加のロジックがあるのが望ましい。booksテーブルに新規追加されるのは、あるISBNでBookのイン…

次の目標は複数ユーザー対応

今はテーブルひとつで済んでるけど、複数ユーザー対応にするとそうはいかない。それぐらい、最初から考えとけよって噂もあるけど、簡単に直せるのがRailsのいいところなんだからガンガン変更を受け付けるのである。とりあえず、以下の3つのテーブルが必要に…

感想を書いたブログへのリンクを張る

DB変更。Amazonへのリンクと、自分のブログの感想のエントリの為のURLを持たせることにする。 class AddBlogToBook < ActiveRecord::Migration @cls = [ [:amazon_url, :string], [:blog_url, :string] ] def self.up @cls.each{|c| add_column :books, *c} …

ステータス変更

後は未読/既読のステータス変更を出来るようにしなくちゃ。それで、第一段階の目標は完了isbnのビューを変更する。 <h1><%= @book.title.gsub(/\s.*$/,"")%>/<%= @book.auther %></h1> <% if @book.mediumimage_url %>

データロードする

よさそうなので、本棚.orgの自分のページから登録してあるISBNのリストを取り出す。これをhondana.txtという名前で保存する。こんな感じ 4334961975 4048736213 4106102277 4798114014 4757735057 479734024X 4840241694 ...これを一行ずつ読んで、登録して…

いよいよ一覧の表示だ

hondana/midokuを作りこむ。まず、コントローラー側は単純でいいな def midoku @book = Book.find(:all, :conditions => "status = 0") end ステータスが0のものだけ持ってくるようにするビューもひたすら並べるだけ <h1>未読棚</h1> <% no_images = [] %> <% @book.e…

画像を取得する

Amazonの画像のURLを取ってくる。タイトルを取ってきたりするのとほとんど一緒。 #Amazonから情報を得る if @book.title.to_s == "" item = Asin.amazon_get(num) attributes = item.elements["ItemAttributes"] @book.title = attributes.elements["Title"]…

ISBNのチェックがばぐってる

wikipediaより なお、計算結果が 10 になった場合、 10 の代わりに X(アルファベットの大文字)を用いる。 また、11 になった場合は、0 となる。 「また、」以降が抜けてた(笑) def chkdigit10(isbn) n = 10 a = 0 isbn[0,9].each_byte do |i| a += (i-48) …

テーブル定義の更新

H:\Rails\hondana>ruby script\generate migration AddImgToBook exists db/migrate create db/migrate/002_add_img_to_book.rbmigrateを編集。 class AddImgToBook < ActiveRecord::Migration @cls = [ [:smallimage_url, :string], [:smallimage_height, :…

書影を表示したいのだから

Amazonから画像のURLを取ってくる必要がある。とりあえず、DBにURLを格納する列を作ろう。

isbn?メソッドの実装

Wikipediaみて、ISBN 10->13変換のやり方を学んだ # isbn? # 正しい13桁ISBN => そのまま返す # 正しい10桁ISBN => 13桁に変換して返す # それ以外 => false def isbn?(n) case n when /^\d{9}[\dX]$/ if chkdigit10(n) == n[-1,1] "978" + n[0,9] + chkdigi…

DBに保存しなきゃな

Amazonから持ってこれるのはわかったけど、持ってきたらDBに入れちゃう事にしよう #Amazonから情報を得る unless @book.title item = Asin.amazon_get(num) attributes = item.elements["ItemAttributes"] @book.auther = attributes.elements["Author"].tex…

コントローラーを作りこむ

URLを/hondana/asinからisbnに変更。こんなメソッドを作った。 def isbn num = params[:id] #正しいISBNが入力されたことを確認する render :action => "error" unless num = isbn?(num) #登録済み? @book = Book.find( :first, :conditions=>["isbn13 = ?"…

登録を受け取るアクション

とりあえず、RESTぽく /hondana/asin/4798013951にアクセスしたら、そのISBNの本が登録されちゃうようにする。asin.rhtmlを以下のように変えてアクセスすると・・・ <h1> 入力内容 </h1> <h2>ASIN:<%= params[:id] %></h2>ちゃんと ASIN:4798013951と表示される。送る側は、ま…

コントローラを作る

メインとなるコントローラをジェネレート。アクションは先に定義した3つの画面に対応したものを作る事にする。 H:\Rails\hondana>ruby script\generate controller Hondana midoku asin pick exists app/controllers/ exists app/helpers/ create app/views/…

ここいらでこのアプリの目標を書く

このアプリの最初の目標。私は本棚.orgを積読管理として使っていた。本を買ってきたり注文したりしたら、まず登録し、読み終わったらカテゴリーを非表示に設定する。本を読むスピードより買うスピードの方がずっと早いので、持ってるけど読んでない本がどの…

DB2クライアントの問題だった

"db2 rails"でググるとトップにくる http://db2.jugem.cc/ のsimさんからコメントで助言をもらった。 勘ですが、もし日本語文字列の操作時のみエラーがでるのであれば、おそらくクライアントのコードページを設定されると良いのではないでしょうか。 この場…