Postしたデータの参照

■フォームから入力したデータをcontrollerで参照する



【0.次のような状況を想定】
パスワードを更新する機能を作成。その際に、現在のパスワードを入力させて、一致していること
を確かめてから更新したい。そこで次のような環境を用意


                                                      • -

▼view<% form_tag :action => 'update_password', :id => @interviewer do %>

現在のパスワード

<%= password_field 'interviewer', 'previous_password' %>

※ここで、previous_passwordは、DBにはなく、モデルが持つ変数とする

                                                      • -

▼controller
def update_password
@interviewer = Interviewer.find(params[:id])
pre_pass = @interviewer.previous_password

                                                      • -

作戦としては、POSTしたprevios_passwordをコントローラで取り出し、今DBに入っているPW
と比べようという感じ。



【1.問題点】
まず、@interviewer.previous_passwordはnilになる。previous_passwordはモデルにしかない変数
なので、POSTして、findする前に消えてしまう(nilになる)。



【2.解決策】
@interviewer = Interviewer.find(params[:id])
pre_pass = @interviewer.hashed_password
☆previous_password_as_input = Interviewer.hash_password(params[:interviewer][:previous_password])

if pre_pass == previous_password_as_input・・・



これなら、POSTした際のデータを参照することができる。



※あまり綺麗な方法ではない。モデルの変数はモデルから参照したい。よって、モデルの中で
比較するとか。
 (validate見たいに)、また、POSTのデータをわざわざモデルと関連付けないで、POST
したデータと、モデル内の現在のPWを比べればいいと思う。
  <%= password_field 'interviewer', 'previous_password' %>

ってするから変な気もする。