第2回 Rails専用IDE「RadRails」でRailsをもっともっと快適にRuby on Rails究極指南(3/3 ページ)

» 2007年03月12日 07時00分 公開
[高橋征義,ITmedia]
前のページへ 1|2|3       

選択肢の作成

 アンケートの選択肢を作る場合は、先ほどと同様に「Generators」タブで「Item Admin::Items」と入力すれば、管理画面が表示されるようになります。しかし、これでは選択肢とアンケート自体の結びつきがありません。そこで、モデルクラスに変更を加えます。

 まず、画面左側にある「RadRails Navigator」タブで、app/models/enquete.rbを開き、

class Enquete < ActiveRecord::Base

    has_many :items

end


のように追加します。同様に、app/modes/items.rbにも、

class Item < ActiveRecord::Base

    belongs_to :enquete

end


のように追加します。これによって、EnqueteとItemを関連づけることができました。

 続いて、選択肢の管理画面でアンケートを選べるようにします。これは、views/admin/items/_form.rhtmlを編集し、Nameのtext_fieldの下にリスト2のような2行を付け加えます。これによって、アンケートが選べるようになります(図10)


<p><label for="item_enquete_id">enquete</label><br/>
<%= select("item", "enquete_id", Enquete.find_all.collect {|e| [ e.title, e.id ] }) %></p>

リスト2 views/admin/items/_form.rhtmlに追加する内容
図10 図10 http://localhost:3000/admin/items/newにアクセスしてみるとアンケートが選択可能に変更されていることが分かる

投票画面の作成

 実際の投票画面は、専用の新しいコントローラーVoteControllerを作成します。ここではすでにモデルが存在するので、scaffoldではなくcontrollerを使用します。「Generators」タブの左側で「controller」を選択し、右側に「Vote show vote」と入力して[Go]ボタンをクリックすると、コントローラーが生成されます。

 そして、コントローラー(リスト3)とビュー(リスト4)を修正します。投票後はそのままリダイレクトで投票前の画面に戻るため、show.rhtmlと一緒に作られたvote.rhtmlは使わずそのままにしておきます。細かい説明は省きますが、rhtmlファイルがテンプレートとなります。これは、eRuby(埋め込みRuby)というフォーマットで書かれたもので、<%?%>の部分がプログラムとして実行されます。

 以上の作業によって、簡単な投票フォームの完成です。


class VoteController < ApplicationController

    def show       @enquete = Enquete.find(params[:id], :include=>[:items])     end
    def vote       @enquete = Enquete.find(params[:id])       if !params[:id] || !params[:item] || !params[:item][:id]           flash[:notice] = '選択してください'           redirect_to :action => 'show', :id => @enquete           return       end
      @item = Item.find(params[:item][:id])       if !@item           flash[:notice] = '不正な入力です'           redirect_to :action => 'show', :id => @enquete           return       end
      @item.count = @item.count.to_i + 1       if @item.save           flash[:notice] = '投票を受け付けました'           redirect_to :action => 'show', :id => @enquete       else           render :action => 'show'       end     end end
リスト3 app/controllers/vote_controller.rb

<html>
<head>
  <title> <%=h @enquete.title %></title>
  <%= stylesheet_link_tag 'scaffold' %>
</head>
<body>

<b><%=h @enquete.title %></b>
<p style="color: green"><%= flash[:notice] %></p>
<%= start_form_tag :action => 'vote', :id => @enquete %>
<p> <%=h @enquete.body %> </p>
<p> <% for item in @enquete.items %> <%= radio_button("item", "id", item.id ) %><%=h item.name %>(<%=h item.count.to_i%>票)<br> <% end %> </p>
<%= submit_tag '投票' %>
<% end_form_tag %> </body> </html>
リスト4 app/views/vote/show.rhtml

まとめ

 ここまで、Instant RailsとRadRailsの導入法と使い方を紹介してきました。RadRailsは発展途上なこともあり、慣れたエディタの方が使いやすいというケースもあるでしょう。ただ、Railsアプリケーションの開発に挑戦するためのはじめの一歩にはなるはずです。これをきっかけに、自分の開発しやすい形を見つけてみてください。

本記事は、オープンソースマガジン2006年3月号「Ruby on Rails 1.0の世界」を再構成したものです。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ