向params发送输入

时间:2010-09-04 19:04:35

标签: ruby-on-rails

我来自Grails,我是Ruby-on-Rails的新手。

所以,我了解到当你创建一个带有符号的form_for:user(“key”)时,当提交时,params []会收到一个带有“:user”的新密钥及其相应的值:

<% form_for :user do |form| %>
    <fieldset>
      <legend>Password</legend>

      <label for="current_password"> Current password:</label>
      <%= form.password_field :current_password %>
      <br>

      <label for="password"> New password:</label>
      <%= form.password_field :password %>
      <br>

      <label for="password_confirmation"> Confirm password:</label>
      <%= form.password_field :password_confirmation %>
      <br>
    </fieldset>
    <%= submit_tag "Update", :class => "submit" %>
<% end %>

params [:user =&gt; {:current_password =&gt; 123,:password =&gt; 321,:password_confirmation =&gt; 321}],对吧?

嗯,问题是Rails不理解:current_password和:password_confirmation,我不知道问题是关于Model User没有那些属性,只有名字,密码和电子邮件。

错误:#

的未定义方法`password_confirmation ='

是否有其他方法可以修复它而不为两个符号创建attr_accessor?我只想在动作中使用一个简单的键,如:

if params[:user].password = params[:user].password_confirmation

 do something...

2 个答案:

答案 0 :(得分:1)

params 是Hash类。实际上它不是简单的Hash类,它是HashWithIndifferentAccess,它增加了使用字符串和符号一次访问哈希的可能性。

您需要了解http://ruby-doc.org/core/classes/Hash.html并阅读http://guides.rubyonrails.org/

上的一些示例

在您的示例中,您还使用了分配 = ,而不是相等的 == 符号。在开始挖掘rails世界之前,最好先阅读一些关于ruby的手册。

因此修复错误应该如下:

if params[:user][:password] == params[:user][:password_confirmation]

Authlogic 设计宝石是由他们自己做的。在发现你知道所有替代方案并卡在墙后面之前,不要重新发明轮子。

答案 1 :(得分:0)

params嵌套在哈希中。所以,你可以像这样访问它:

if params[:user][:password] == params[:user][:password_confirmation]
  # do stuff
end