hagino3000's blog

平成アーカイブス (更新停止)

Railsでソーシャルブックマーク的なものを作る-その4

つづき。

入力フォーム

猫も杓子もAJAXという時代なので非同期処理にする。
Railsにいろいろメソッドが用意されているけど、入力フォームは remote_form_for、一覧表示部の各行に配置するボタン等の処理は link_to_remote を使ってます。

ここでは、画面で入力された値を非同期に登録して、サーバー側で処理が終わり次第結果メッセージを画面に反映させてます。ロード中のアニメーション等をさせるjavascriptはapplication.jsに書いてます。

ビュー側の記述

jsファイルの読み込み
jRails使用時でも、次の一行でjQuery.js等、必要なjsファイルはincludeしてくれます。

<%= javascript_include_tag :defaults %>


新規データ入力フォーム

<div id="message"></div>
<div id="create_form">
<% remote_form_for(:new_bookmark, 
		@new_bookmark, 
		:url=>{:action=>"create"},
		:update   => "message",
		:before   => "funcCommon.startAjaxAnimation('#new_bookmark_submit')",
		:success  => "funcIndexPage.compCreation()",
		:failure  => "funcCommon.alertAjaxError()") do |f| %>
  <p>
    <b>タイトル</b><br />
    <%= f.text_field :title, {:class=>:text_field}%> *必須
  </p>
  <p>
    <b>Url</b><br />
    <%= f.text_field :url, {:class=>:text_field} %> *必須
  </p>
  <p>
    <b>コメント</b><br />
    <%= f.text_area :user_comment, {:class=>:text_area} %>
  </p>
  <p>
    <b>タグ(スペース区切り)</b><br />
    <%= f.text_field :delimited_tags, {:class=>:text_field} %>
  </p>
  <p>
    <%= f.submit "新規登録" %>
  </p>
<% end %>
</div>
サーバ側の記述

controller
パラメータを受け取って登録するだけ。

  def create
    @bookmark = Bookmark.new(params[:new_bookmark])
    
    if @bookmark.save
      _result_message = 'You succeeded in making a new entry!!'
    else
      _result_message = 'Sorry. Something error occured'
    end
    
    render :text => _result_message
  end

テスト

テストデータを大量に登録する場合はmysqlimportが楽。

サーバへアップ

  1. サーバー側でrailsアプリの作成
  2. FFFTPの設定で、*.svnファイルは転送対象外にしておく。
  3. ファイルのアップロード
  4. ディレクトリの権限の変更
    1. tmp
    2. log
  5. environment.rbの修正
    1. LOAD_PATHの追加
    2. GEM_HOMEの設定
    3. productionモードにする

公開

ソーシャルブックマーク的な何か。
http://testbookmark.coresv.net/

coreserver上でapacheと連携させて動作させていますが、驚きの遅さorz。mysqlの設定もいじれないので4文字以下のタグは検索対象にならない点もアレですし。やはりレンタルサーバを借りてRailsアプリを動かす場合はroot権限つきじゃないと厳しいと思います。

urlのuniqueインデックスは解除してあります。(既存のURLを入力した際の処理を実装していないため)