我有一个用户可以更改密码的地址。目前,我没有做任何关于更新密码的事情,因为我的表单由于某种原因没有通过params。之前,我给你代码,只是为了让你知道,你会在命令中看到puts
用于调试目的。
密码表格:
<div class="title">Change Password</div>
<div class="password">
<%= profile_error_messages_for(@profile) %>
<%= form_for :user, url: change_password_path do |f| %>
<%= hidden_field_tag 'attribute', 'password', id: nil %>
<div class="input-box">
<%= label_tag(:current_password, 'Current Password') %>
<%= f.password_field :current_password, class: 'form-control input-md input-width-large' %>
</div>
<div class="input-box">
<%= label_tag(:password, 'New Password') %>
<%= f.password_field :password, class: 'form-control input-md input-width-large' %>
</div>
<div class="input-box">
<%= label_tag(:password_confirmation, 'Password Confirmation') %>
<%= f.password_field :password_confirmation, class: 'form-control input-md input-width-large' %>
</div>
<%= submit_tag 'Change Password', class: 'btn btn-success btn-md input-width-large' %>
<% end %>
</div>
profiles_controller:
elsif params[:attribute] == 'password'
puts 'params: ' + params[:current_password].to_s
puts 'here 1'
if @profile.password_match?(params[:current_password])
puts 'here 2'
else
puts 'here 3'
render 'edit'
end
end
用户模型:
def password_match?(entered_password = '')
puts 'Password: ' + entered_password.to_s
puts salt
password == User.hash_with_salt(entered_password, salt)
end
在哪里我尝试打印出值,它是空的。我们甚至不需要检查模型。因为当我在控制器中键入它时,它也是空的。
puts 'params: ' + params[:current_password].to_s
我从3天开始就一直在研究这个问题。请有人帮助我=)。谢谢。
答案 0 :(得分:1)
尝试在控制器中使用params[:user][:current_password]
。
答案 1 :(得分:1)
如果您不确定某个字段是否存在,或者params
返回的散列位于何处,则检查params
本身要好得多。
当您使用form_for
帮助程序时,提交的字段将包装在您为form_for
传入的资源(或简称名称)的小写模型名称下。因此,在您的情况下,由于您已经提供了:user
名称,params
返回的哈希将包含一个键'user'
,在该键下,您的所有字段都将与其给定的结构一起出现。所以你应该使用:
params[:user][:current_password]
答案 2 :(得分:1)
@cyonder,因为你是Rails / Ruby的新手,我们的责任是至少给你一些可以帮助你的想法:
使用这些工具(pry),您可以将break-points
放在代码中,以便服务器执行在此时停止,您可以在该特定执行点分析对象的值。
例如:
elsif params[:attribute] == 'password'
binding.pry
if @profile.password_match?(params[:current_password])
binding.pry
else
binding.pry
render 'edit'
end
end
发送HTTP请求时; binding.pry
停止执行,您可以在运行服务器的终端rails-console
rails s
像这样的东西
[1, 10] in /PathTo/project/app/controllers/articles_controller.rb
3:
4: # GET /articles
5: # GET /articles.json
6: def index
7: binding.pry
=> 8: @articles = Article.find_recent
9:
10: respond_to do |format|
11: format.html # index.html.erb
12: format.json { render json: @articles }
(pry)
在此之后,我希望你可以自己调试你的应用程序 有关详细信息,请参阅
http://guides.rubyonrails.org/debugging_rails_applications.html#debug http://railscasts.com/episodes/280-pry-with-rails