困ったときのメモ ver.2.0

主に Ruby on Rails のメモ。など。

Railsで、てっとりばやくアンケートフォームをつくる

販売計画.heroku.com」に、アンケートフォームを追加してみた。
選択肢を用意して〜とかってときに、acts_as_taggable_onでうまいこといったのでメモ。
acts_as_taggable_on については前記事に。キャッシュの付け方も追記した。

はじめに

アンケート用のモデルを作る。めんどいからscaffoldで。
選択項目はacts_as_taggable_onに丸投げするので、そのキャッシュフィールドと記入項目を。
ただし、選択肢を作るためのテンプレ用レコードを確保するので、そのフラグもつけとく。
あとは必要であればメアドとか、名前欄とかも入れる。

rails g scaffold questionnaire cached_satisfaction_list:string cached_trigger_list:string body:text template:boolean

questionnaireモデルに追記する。

選択項目を作っていく。ここでは、2つ項目をつけてみた。

class Questionnaire < ActiveRecord::Base
  acts_as_taggable_on :satisfactions, :triggers
end

コントローラでの処理

挙動をどうするかで10分くらい悩んだ。が、newとcreate以外は認証ではじくようにして、
edit時にテンプレを編集するようにした。create時にはテンプレのリスト内のものだけしか
入らないようにゴニョゴニョする。modelでやろうとしたけどタイミング的にできないっぽい。

ビューの書き換え

フォームについては、newのときとeditのときとで選択肢の表示方法を変える必要がある。
_form.html.erbの一部

  <div class="field">
    <p>このサイトの評価をお願いします</p>
    <% Questionnaire.satisfaction_counts.order(:name).each do |tag| %>
      <label>
        <%= f.radio_button :satisfaction_list, tag %> <%= tag %>
      </label>
    <% end %>
    <% if action_name == 'edit' %>
      <%= f.text_field :satisfaction_list %>
    <% end %>
  </div>

なんかこれダサイ。

おわりー

要するに、tag_list的な感じで選択項目を増やすのが楽ちんですよということです。
ラジオボタンチェックボックスもセレクトボックスでもどうにでもなるのが素敵なかんじ。

〜〜 2011-09-17 ビューを手直しした。〜〜

チェックボックスとかのラベルは、「labelタグ」で囲んでしまえばいいということを今さら知ったので書き換えた。IE6とかもう知らんです。