【问题标题】:sending input to params向参数发送输入
【发布时间】:2010-09-04 19:04:34
【问题描述】:

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

所以,我了解到,当您创建一个带有 :user("key") 之类的符号的 form_for 时,提交 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 => {: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...

【问题讨论】:

  • 在 Rails 最受欢迎的书中,他们使用 attr_accessor 来确认密码。无论如何,在将其传递给模型更新方法之一之前,您始终可以从哈希中删除该键。

标签: ruby-on-rails


【解决方案1】:

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

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

在您的示例中,您还使用了赋值 =,而不是等号 ==。在开始研究 Rails 世界之前,最好阅读一些有关 ruby​​ 的手册。

所以修复你的错误应该是这样的:

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

AuthlogicDevise gems 自己做。在您发现自己知道所有替代方案并陷入困境之前,请不要重新发明轮子。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2022-01-23
      • 2012-01-24
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多