简单的字符串比较无效!挫折随之而来

时间:2011-02-27 04:51:58

标签: ruby-on-rails ruby

我似乎无法弄清楚为什么这种比较不起作用:

if params[:password].to_s == params[:conf_password].to_s
  #do something
else
  #do something else

结果始终为false,执行else块...任何人都知道为什么?

编辑:检查输出显示两个参数相同。使用password_field_tag中的“form_for”和“conf_password”收集“密码”。

如果'form_for'中包含“conf_password”,则不会抛出此类方法错误,因为模型中没有列conf_password。也许有更好的方法来收集这个参数,这可能会解决问题。

关于params的一些日志输出。

PARAMS: {"password"=>"1234567", "company"=>"company1", "companykey"=>"ckey2"}, "conf_password"=>"1234567", 

获取这些值的代码

<tr> <td> <%= label_tag(:password, "Password") %> </td> <td> <%= f.password_field :password %> </td> </tr>

<tr> <td> <%= label_tag(:conf_password, "Confirm Password") %> </td> <td> <%= password_field_tag(:conf_password) %> </td> </tr>

1 个答案:

答案 0 :(得分:3)

在我看来,您不应该访问:password:conf_password,就像:password参数在哈希中一样,而:conf_password则不是。

当您声明form_for时,您还要定义包含:password的哈希,并且您必须使用:password访问new Object(params[:object]).password - 参数。您也可以使用params[:object][:password]访问参数。

基于复制粘贴编码的未经测试的示例表单

<%= form_for @person do |f| %>
  <%= f.label :first_name %>:
  <%= f.text_field :first_name %><br />

  <%= f.label :password %>:
  <%= f.text_field :password %><br />

  <%= f.submit %>
<% end %>

未经测试的示例控制器基于演绎而非知识

if Person.create(params[:person]).password == 'foobar'
   # go on
else 
   # fail
end

有关详细说明,请参阅API:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html