Flickr on Railsをいじる(その1)

昨日Railsで作ったFlickrインタフェースを少し改良してみました。改良点は以下の通り。

  1. flickrの特定ユーザを検索し、そのコレクションを表示できるようにする。
  2. 1つの検索インタフェースを使って、タグおよびユーザの両方の検索が切り替えでできるようにする。
  3. 表示レイアウトにタイトルバーナーを追加する。

手順は以下の通り。

  • 1. select_tagの追加

検索の対象を選択するために、select_tagをindex.rhtmlの<fieldset>に追加する。選択肢はoptions_for_selectで記述する。

  <fieldset>
     <label for="tags">Tags:</label>
     <%= select_tag 'kind', options_for_select({'tag' => 'search_tag','user' => 'search_user'}) %>
     <%= text_field_tag 'tags' %>
     <%= submit_tag 'Find' %>
  </fieldset>
  • 2. form_remote_tagの修正

select_tagで選択した対象(tag or user)をsearch methodに渡せるようにform_remote_tagを修正する。

  <%= form_remote_tag :url => {:action => 'search', :params => params[:kind]},
                :update => 'photos',
   	        :complete => visual_effect(:blind_down, 'photos'),
	        :before => %(Element.show('spinner')),
	        :success => %(Element.hide('spinner')) %>
  • 3. search methodの修正

select_tagでの選択肢によって処理を切り分けるためにcase文を使う。こちらにあったFlickr.rbのmethodを参照にしてsearch_user内の処理を記述する。

  def search
    flickr = Flickr.new 'your flickr API key'
    
    case params[:kind]
    when "search_tag"
      render :partial => "photo", 
                 :collection => flickr.photos(:tags => params[:tags], :per_page => '30')
    when "search_user"
      user = flickr.users(params[:tags])
      render :partial => "photo", :collection => user.photos    
    end
  end
  • 4. application.rhtmlの修正

タイトルバナーを表示するように、application.rhtmlのを修正する。

  <body>
	<div id="banner">
		My Flickr
	</div>
	<div id="main">
		<%= yield %>
	</div>
  </body>

application.rhtmlに追加したbanner, mainのスタイルをflickr.cssに記述する。

  #banner {
    background: #C0C0C0;
    padding-top: 10px;
    padding-bottom: 10px;
    border-bottom: 2px solid;
    font: small-caps 40px/40px "Times New Roman", serif;
    color: #A52A2A;
    text-align: center;
  }

  #main {
    margin-left: 0em;
    padding-top: 2ex;
    padding-left: 2em;
    background: white;
  }
  • 6. 完了

ブラウザでhttp://localhost:3000/flickrにアクセスし表示を確認。タブでtagまたはuserを選択し検索ワードを入れて検索。動いているようです。select_tagで選択した対象をsearch methodに渡す方法が分からずに悩みました。入力した検索ワードがヒットしない場合に、画面上にrailsのエラーメッセージが出てしまいます。これも直したいです。