Railsのform_tagの中にテーブルのカラム以外の値
編集画面を作っていて、メールの送信状況を変更したい。
メールは送信した場合にmailedカラム(日時型)に保存される仕掛けにしたんだけど、過去のデータを手動インポートすることになりそうなので「やっぱり日時、日付のデータを消したい」という欲求がでてきた。
edit.rhtml
<% form_tag :action => 'update', :id => @iftb do %> <%= render :partial => 'form', :locals=>{:context=>'edit'} %> <%= submit_tag '登録する' %> <% end %>
ここは普通です。
_form.rhtml
<%- unless session[:username].nil? -%> <tr> <td class="label_blue">メール送信日時</td> <td><%= datetime_select 'iftb', 'mailed', {:use_month_numbers=>true} %> (#<%= check_box 'mailedtime', 'flag' %>時刻を挿入しない時はチェックする) </td> <!--チェックボックスを使って、mailedの値をnilに出来るようにする--> </tr> <%- end -%>
ここがちょっと違う。パラメータのハッシュな部分を宣言とか定義とかまったくしていない「その場しのぎ」的な値を用意してあげる。(アンダーバーを指定すると人間様がややこしくなる)
コントローラ側での値の呼び出し
:通常の値は
@iftb = Iftb.find(params[:id])
params[:iftb][:mailed]
@iftb.mailed:特別というかその場しのぎの値
params[:mailedtime][:flag]
チェックボックスがONだと「1」となるので、強引な手法を書くとこうなった。
if @iftb.update_attributes(params[:iftb])
@iftb.update_attribute(:mailed, nil ) if params[:mailedtime][:flag].to_i == 1
ifの前でハッシュの値を「nil」に変更してもうまくいかないので、こんなになった。