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>
なんかこれダサイ。
〜〜 2011-09-17 ビューを手直しした。〜〜
チェックボックスとかのラベルは、「labelタグ」で囲んでしまえばいいということを今さら知ったので書き換えた。IE6とかもう知らんです。