我来自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...
答案 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