2010-09-04 84 views
0

我来自Grails,我是Ruby on Rails的新手。发送输入到params

所以,我知道,当你创建一个像一个符号的form_for:用户(“键”),submited当PARAMS []收到一个新的关键“:用户”,并从它的相应值:

<% 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 => {:current_password => 123,:password => 321,:password_confirmation => 321}],对不对?

嗯,问题是,Rails不明白:current_password和:password_confirmation,我不知道问题是关于模型用户没有这些属性,只有名称,密码和电子邮件。

错误:未定义的方法`password_confirmation =”#为

有另一种方式来解决它,而无需创建两个符号的attr_accessor?我只想使用一个简单的密钥在里面的动作,如:

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

do something... 
+0

在Rails最受欢迎的书中,他们使用attr_accessor进行密码确认。无论如何,在将其传递给模型更新方法之前,您总是可以从哈希中删除该密钥。 – 2010-09-04 19:35:45

回答

0

PARAMS嵌套在一个哈希。所以,你访问它是这样的:

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

PARAMS是哈希类。实际上这不是简单的哈希类,它是HashWithIndifferentAccess,它增加了同时使用字符串和符号访问哈希的可能性。

你需要的是理解和http://ruby-doc.org/core/classes/Hash.html也在http://guides.rubyonrails.org/

在你的榜样,你也使用分配=,而不是等于==牌子,上面写着一些例子。在开始在rails世界中挖掘之前,最好阅读一些关于ruby的手册。

因此修复你的错误应该是这样的:

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

Authlogic设计宝石由自理的做到这一点。在你发现你知道所有的选择并卡在墙后之前,不要重新发明轮子。