Как сохранить дополнительную информацию из формы Devise? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть контроллер приложения, подобный этому:

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 сохраняются не в БД, а во всех остальных да. В документе устройства я не нахожу особого способа выбора формы.

1 Ответ

0 голосов
/ 06 марта 2019

Хорошо, ваши параметры переданы, но не в правильном пространстве имен.Вместо select_tag вы должны использовать f.select метод:

<%= f.select(:city_id, options_for_select(City.pluck(:name, :id), target_blank: true )) %>

И аналогично для второго из ваших параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...