如何从Devise表单保存其他信息?

时间:2019-03-06 13:46:15

标签: ruby-on-rails database rubygems

我有一个这样的应用程序控制器:

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :description, :city_id, :golf_level])
  end
end

并使用以下设备注册表单:

<h2 class='container'>Inscription</h2>
<div class="tab-pane show active" id="component-1-1" role="tabpanel" aria-labelledby="component-1-1">
  <div class="component-example">
    <div class='container'>
      <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
      <div class='row'>
        <div class="col-md-6">
            <%= render "devise/shared/error_messages", resource: resource %>
            <div class='field form-group'>
              <%= f.label 'Prénom' %><br>
              <%= f.text_field :first_name, class: 'form-control' %>
            </div>

            <div class='field form-group'>
              <%= f.label 'Nom' %><br>
              <%= f.text_field :last_name, class: 'form-control' %>
            </div>

            <div class="field form-group">
              <%= f.label :email %><br />
              <%= f.email_field :email, autofocus: true, autocomplete: "email", class: 'form-control' %>
            </div>
            <div class='field form-group'>
              <%= f.label 'Niveau' %>
              <%= select_tag(:golf_level, options_for_select([['débutant', 'débutant'], ['intermediaire', 'intermediaire'], ['confirmer', 'confirmer']])) %>
            </div>
            </div>
          <div class="col-md-6">
            <div class="field form-group">
              <%= f.label 'Mot de passe' %>
              <% if @minimum_password_length %>
              <em>(<%= @minimum_password_length %> characters minimum)</em>
              <% end %><br />
              <%= f.password_field :password, autocomplete: "new-password", class: 'form-control' %>
            </div>

            <div class="field form-group">
              <%= f.label 'Confirmer mot de passe' %><br />
              <%= f.password_field :password_confirmation, autocomplete: "new-password", class: 'form-control' %>
            </div>

            <div class='field form-group'>
              <%= f.label 'Ville' %>
              <%= select_tag(:city_id, options_for_select( City.all.collect { |city| [city.name, city.id] }, {target_blank: true} )) %>
            </div>

            <div class='field form-group'>
            <%= f.label 'Description'%>
              <%= f.text_area :description, size: "60x5", class: 'form-control'%>
            </div>
            </div>
            <div class="actions">
              <%= f.submit "Inscription", class: 'btn btn-primary' %>
            </div>
          <% end %>
          <button class='btn btn-primary' style="margin-left:20px;"><%= render "devise/shared/links" %></button>
      </div>
    </div>
  </div>
</div>

我的问题可能是愚蠢的,但是:当我以这种形式创建用户时,选择标签golf_level和city_id不会保存在db中,而其他所有都是。在设备文档中,我找不到用于选择表单的特殊方法。

1 个答案:

答案 0 :(得分:0)

好的,您的参数已传递,但未在正确的名称空间中传递。而不是<?php session_start(); if (session_status() == PHP_SESSION_ACTIVE) { echo 'Session is active <br>'; } else echo"session is ded"; echo $_SESSION["SESSION_EMAIL"]; // it prints out an error if it screws up here ?> ,您应该使用select_tag方法:

f.select

第二个参数同样如此。