ユーザーが使える機能はざっと3つ
[1]作っているリストを見る
[2]これまでに作ったリストを見る
[3]お気に入りに登録したリストを見る
それぞれをどのように実装したか、詳しく書いて行きます。
[1]作っているリストを見る
マイコン・moxaとWiPortがセットになったMuliusデバイスを持つユーザー同士がすれ違った瞬間、、、、
1,moxa同士がradio通信を行って、信号を送り合う。
2,moxaはradio通信によって得た信号に応じて、serialSendでWiPortにHTTP POSTの文章を送る。(※c192.168.0.111:3000 ~ \r\n\r\n という文字列)
3,WiPortはmoxaから受け取った文字列をもとに、Railsで作ったMulius WebAppへHTTP POSTを行う。
4,Rails/Mulius WebAppでは、WiPortから送られて来たPOST要求を元に、DBへのレコードの更新を行う。
このとき、すれ違ったユーザーがその時聞いていた曲と、書いていたメッセージをレコードにストックする必要がある。
ユーザーIDだけをレコードにためては、ユーザーの情報が変化してしまったとき、その時聞いていた曲
がころころ変わってしまうことになる。どうやったかというと、まず「すれ違い」のテーブルをmysqlに作った。フィールドは、id|user_id(すれちがったユーザーのID)|song_id(すれ違ったユーザーがその時聞いていた曲のID)|message(すれちがったユーザーのその時のメッセージ)|playlist_id(主体ユーザーが現在作っているプレイリスト)の5つ。「すれ違い」DBを管理するencounter_controller.rbで以下のようなコードを書いて行った。
#aとbがすれ違った時
def ab
@encounter = Encounter.new(params[:encounter])#新しいencounterを作ります
@user1 = User.find(1)#ユーザー1のID
@user2 = User.find(2)#ユーザー2のID
conditions = ["user_id=?", 1 ]
@playlist = Playlist.find(:first, :conditions => conditions, :order => "updated_at DESC" )
@playlistid = @playlist.id #いま作っているプレイリストを探し出し、関連づける
@encounter.user_id = @user2.id
@encounter.song_id = @user2.song_id#ユーザーbのその時の曲をそのままencounterのsong_idとする。
@encounter.message = @user2.message#ユーザーbのその時のメッセージをそのままencounterのmessageとする。
@encounter.playlist_id = @playlistid
#最終的に、いろいろな所から引っ張って来たデータを、encounterの中に入れる。
if @encounter.save
flash[:notice] = '新規登録完了'
redirect_to :action => 'index'
else
render :action => 'new'
end
end
同様にac、ad、ba、bc、、、、とメソッドを用意しておく。railsのRESTFULLな特製を活かし、POST /encounter/ab とHTTPリクエストを送るだけで、ボディーにメッセージを入れなくともカンタンにDBにレコードを追加して行く事が出来る。
またJavaScriptで、このページのみ5秒間隔でリロードするようにしてあるので、あたかもすれ違った瞬間、リアルタイムで更新されているように見せている。
[2]これまでに作ったリストを見る
playlistテーブルから、いまログインしているユーザー=@current_userのIDを用いてfindする。
def index
@search = params[:id]
conditions = ["user_id=?",@search]
@playlists = Playlist.find(:all, :conditions=> conditions )
end
[3]お気に入りに登録したリストを見る
favoriteという結合テーブルを作って、userテーブルとplaylistテーブルを結合させた。フィールドはシンプル。
|id|user_id|playlist_id|
こちらも「作ったリスト」と同様、user_idからfindする。
というわけで、encounterの部分に手こずりましたが、他はいたってシンプルな構造になっています。レコードの管理になれたら、コレくらいのWebAppはさくっと作れるrailsの凄さ。でも動作がちょっと遅いのと、仕様が「?」な時があるのがタマにきずってところですかね?
でも、メディアデザインを専攻しているような学生、つまり私なんかにはこの開発スピードは何よりも美味しい。
まだまだ流行って欲しいところです。
0 件のコメント:
コメントを投稿