■フォームから入力したデータをcontrollerで参照する
【0.次のような状況を想定】
パスワードを更新する機能を作成。その際に、現在のパスワードを入力させて、一致していること
を確かめてから更新したい。そこで次のような環境を用意
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
▼view<% form_tag :action => 'update_password', :id => @interviewer do %>
現在のパスワード
<%= password_field 'interviewer', 'previous_password' %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
▼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' %>