特定の状況でhidden_field_tagがどのように動作するかを理解することは本当に難しいです。私は誰かが私に説明することを望む。パスワードリセットフォームでhidden_field_tagがどのように機能するのですか
リセットパスワードの形式はrailstutorialです。
私の見解は以下のとおりです。
<% provide(:title, 'Reset password') %>
<h1>Reset password</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@user, url: password_reset_path(params[:id])) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= hidden_field_tag :email, @user.email %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<%= f.submit "Update password", class: "btn btn-primary" %>
<% end %>
</div>
</div>
私の更新アクションと強力なのparams方法:
def update
if params[:user][:password].empty?
@user.errors.add(:password, "can't be empty")
render 'edit'
elsif @user.update_attributes(user_params)
log_in @user
@user.update_attribute(:reset_digest, nil)
flash[:success] = "Password has been reset."
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation)
end
アクセスeditアクションは、ユーザーがメールアドレスを入力するとアプリがこれにリンクを送信このパスのようなアクティベーショントークンを持つ電子メール:
/password_resets/9Ij91DFChTeWTitNDVJfYw/edit?email=example%40railstutorial.org
このリンクを開いて、パスワード。それは完全に機能的です。私の質問は、編集アクションのユーザーがすでにいて、更新アクションで(hidden_field_tagに付属)を明示的に使用していない場合、なぜ非表示タグが必要なのですか?
あなたは雄牛の目を打つ!私は '' update''アクションの '' before_action''を '' params [:email] ''でユーザを見つけています。これはもっと感謝しています。ありがとう! – rwehresmann
@nic私たちは 'session'や' cookies'を使うことができますか?ユーザーはまだログインしていません。パスワードを忘れてしまった – truongnm
ユーザーがログインしているかどうかに関係なく、セッションとCookieを利用できます。プログラマがどちらに配置するかは選択肢です。 –