【问题标题】:How to create password and confirmation when using form_for?使用form_for时如何创建密码和确认?
【发布时间】:2025-12-11 03:50:01
【问题描述】:

我正在使用form_for,但我不确定如何使用助手创建密码和密码确认?

到目前为止:

<%= form_for :user, @user, ....   do |f| %>

<%= f.text_field :user_name, :class ....  %>

password??

<% end %>

另外,当发布到 /user/create 操作时,如何防止模型中的某些字段在使用时被初始化:

@user = User.new(params[:user])

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    把它放在你的视图表单中:

    <%= f.password_field :password %>
    <%= f.password_field :password_confirmation %>
    

    这在你的用户模型中:

    validates_confirmation_of :password
    

    现在,为了防止在您的控制器中进行不必要的初始化,请将以下内容添加到您的模型中:

    attr_accessible :attribute1, attribute2
    

    现在这些属性将是唯一可以通过所谓的“批量分配”设置的属性。

    【讨论】:

    • attr_accessible 在我的控制器或我的模型中?
    • 抱歉,您的模型中包含了“validates_confirmation_of”。
    【解决方案2】:

    如果你有一个数据库列password(当然你最好存储一个盐和加密密码),那么你可以这样做:

    class User
      attr_accessor :password_confirmation # Note. You do not need this field in database, it's for 1-time use
    
      # The following 2 lines let you prevent certain fields
      attr_accessible :user_name
      attr_protected :password
      # Note that if you used attr_accessible, and all other fields cannot be assigned through User.new(params[:user[), while if you used attr_protected, only those fields cannot assigned.
    
     validates_confirmation_of :password # This automatically validates if :password == :password_confirmation
    

    在你看来:

    <%= f.password_field :password %>
    <%= f.password_field :password_confirmation %>
    

    【讨论】:

      最近更新 更多