Tambourine作業メモ

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

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

URLを/hondana/asinからisbnに変更。

こんなメソッドを作った。

  def isbn
    num = params[:id]
    
    #正しいISBNが入力されたことを確認する
    render :action => "error" unless  num = isbn?(num)
    
    #登録済み?
    @book = Book.find( :first, 
                       :conditions=>["isbn13 = ?", num] )
    
    #登録されてない場合
    unless @book
      @book = Book.new
      @book.isbn13 = num
    end
    
    #Amazonから情報を得る
    unless @book.title
      item = Asin.amazon_get(num)
      attributes = item.elements["ItemAttributes"]
      @book.auther = attributes.elements["Author"].text
      @book.title  = attributes.elements["Title"].text
    end
  end

isbn?メソッドは

  # isbn?
  # 正しい13桁ISBN => そのまま返す
  # 正しい 9桁ISBN => 13桁に変換して返す
  # それ以外 => false
  def isbn?(n)
    #まだ未実装
    n
  end

というプライベートメソッド。要するにまだ何にもしてない(笑)。後でやろう。

Asinモジュールは、こないだ載っけたasin.rbをhondana/libに突っ込んで、上下を

module Asin

end

で挟んで、メソッドもクラスメソッドに変更したもの。

Asin.amazon_getはREXML::Elementsを返すので、environment.rbに

require 'rexml/document'

を足しておく。

確認用にviewも作ろう。isbn.rhtmlを作る。

<h1> 入力内容 </h1>

<dl>
<dt>ISBN:</dt><dd><%= @book.isbn13 %></dd>
<dt>Title:</dt><dd><%= @book.title %></dd>
<dt>Auther:</dt><dd><%= @book.auther %></dd>
</dl>

さあ、動かしてみよう

hondana/isbn/の後にDBに入っているレコードのISBN13が指定されればDBから読んで、ないものであればAmazonから引っ張ってきてる。うむうむ