发送输入到params
问题描述:
我来自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...
答
PARAMS嵌套在一个哈希。所以,你访问它是这样的:
if params[:user][:password] == params[:user][:password_confirmation]
# do stuff
end
答
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或设计宝石由自理的做到这一点。在你发现你知道所有的选择并卡在墙后之前,不要重新发明轮子。
在Rails最受欢迎的书中,他们使用attr_accessor进行密码确认。无论如何,在将其传递给模型更新方法之前,您总是可以从哈希中删除该密钥。 – 2010-09-04 19:35:45