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が楽。
サーバへアップ
公開
ソーシャルブックマーク的な何か。
http://testbookmark.coresv.net/
coreserver上でapacheと連携させて動作させていますが、驚きの遅さorz。mysqlの設定もいじれないので4文字以下のタグは検索対象にならない点もアレですし。やはりレンタルサーバを借りてRailsアプリを動かす場合はroot権限つきじゃないと厳しいと思います。
urlのuniqueインデックスは解除してあります。(既存のURLを入力した際の処理を実装していないため)