Rails设计允许​​注册表单中的自定义字段

时间:2014-12-18 07:38:26

标签: ruby-on-rails ruby-on-rails-4 devise

我的网站上有两种注册方式。

  1. 用户
  2. 主机
  3. 有两种与注册相关的模型

    users(id, name, is_host, ...)
    
    hosts(company_name, user_id, status, ...)
    

    默认情况下,每个主机都是用户。当用户在网站上注册时,他必须输入以下字段

    1. 名称
    2. 电子邮件
    3. 密码
    4. 电话号码
    5. 当主持人注册时,他必须输入以下内容

      1. 名称
      2. 电子邮件
      3. 密码
      4. 电话号码
      5. 公司名称
      6. 在将表单作为主机提交时,它应该将数据保存在用户模型中,并将is_host标志设置为1,其他方式为0,然后存储{{ 1 {} company_name模型。

        我做了什么?

        我已经安装了devise并生成了迁移表并生成了作用域视图。

        我想要实现的目标是什么?

        1. 在注册表单中添加自定义字段,如何为用户注册表单设置hosts
        2. 如何为同一模型创建单独的注册表单并充当strong parameter的注册
        3. 视图/用户/注册/ new.html.erb

          HOSTS

          服务器错误:

          <h2>Sign up!!</h2>
          
          <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
            <%= devise_error_messages! %>
          
            <div class="field">
              <%= f.label :first_name %><br />
              <%= f.text_field :first_name, autofocus: true %>
            </div>
          
            <div class="field">
              <%= f.label :last_name %><br />
              <%= f.text_field :last_name %>
            </div>
          
            <div class="field">
              <%= f.label :email %><br />
              <%= f.email_field :email %>
            </div>
          
            <div class="field">
              <%= f.label :password %>
              <% if @validatable %>
              <em>(<%= @minimum_password_length %> characters minimum)</em>
              <% end %><br />
              <%= f.password_field :password, autocomplete: "off" %>
            </div>
          
            <div class="field">
              <%= f.label :password_confirmation %><br />
              <%= f.password_field :password_confirmation, autocomplete: "off" %>
            </div>
          
            <div class="actions">
              <%= f.submit "Sign up" %>
            </div>
          <% end %>
          
          <%= render "users/shared/links" %>
          

1 个答案:

答案 0 :(得分:2)

请看这个例子......

我们创建了迁移 - 这里没什么特别的

class AddFieldsToUsers < ActiveRecord::Migration
  def change
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string
  end
end

的应用程序/视图/设计/注册/ new.html.slim

h2 Sign up

= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
  = devise_error_messages!

    div
     = f.label :first_name
    br
     = f.text_field :first_name, autofocus: true

    div
     = f.label :last_name
    br
     = f.text_field :last_name

    div
     = f.label :email
    br
     = f.email_field :email

    div
     = f.label :password
    br
     = f.password_field :password

    div
     = f.label :password_confirmation
    br
     = f.password_field :password_confirmation

    div
     = f.submit 'Sign up'

= render 'devise/shared/links'

自定义RegistrationsController

def sign_up_params
  devise_parameter_sanitizer.sanitize(:sign_up)
end

def account_update_params
  devise_parameter_sanitizer.sanitize(:account_update)
end

注册控制器

class RegistrationsController < Devise::RegistrationsController

  private

  def sign_up_params

    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)

  end

  def account_update_params

    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)

  end
end

配置/ routes.rb中

devise_for :users, :controllers => { registrations: 'registrations' }