我正在做第12章:rails railstutorial.org中的密码重置,我看到了这段代码
app/views/password_resets/edit.html.erb
<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' %>
<%= 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>
PasswordResetsController
class PasswordResetsController&lt; ApplicationController中
def edit
@user = User.find_by email: params[:email]
end
def update
@user = User.find_by email: params[:email]
if params[:user][:password].empty?
add_errors
elsif @user.update_attributes user_params
log_in @user
flash[:success] = t "controllers.password_reset.success"
redirect_to @user
else
render :edit
end
end
end
重置此类链接:http://localhost:3000/password_resets/DCxf-6H4fyBf32QrW-d2Zg/edit?email=trag08%40gmail.com
点击链接,路由呼叫操作edit
并收到电子邮件至params [:email]并查看edit.html.erb
并将电子邮件发送到hiddren字段。为什么在此代码中,他们不会使用f.hidden_field :email, @user.email
。
我尝试使用f.hidden_field :email, @user.email
并在控制器中编辑更新操作。
def update
@user = User.find_by email: params[:user][:email]
if params[:user][:password].empty?
Rails rase错误:undefined method
合并&#39; for&#34; xxx@gmail.com":String`,它没有得到用户。为什么这样?
答案 0 :(得分:2)
正如您在教程示例中看到的那样,<%= hidden_field_tag :email, @user.email %>
并未创建params[:user]
中可用的参数。
创建params[:email]
当他们拨打他们使用的电子邮件时:
@user = User.find_by email: params[:email]
您使用:
@user = User.find_by email: params[:user][:email]
我建议您查看您正在使用的rails helper标记创建的确切内容。请参阅Form Tag Helpers。