表格提交后,参数是空的

时间:2015-10-07 01:48:07

标签: ruby-on-rails ruby-on-rails-4

我有一个用户可以更改密码的地址。目前,我没有做任何关于更新密码的事情,因为我的表单由于某种原因没有通过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天开始就一直在研究这个问题。请有人帮助我=)。谢谢。

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的新手,我们的责任是至少给你一些可以帮助你的想法:

在Rails中调试:

我们使用prybye-bug

等调试工具

使用这些工具(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