2015-03-21 4 views
0

У меня есть небольшое приложение Rails 4, у которого есть Devise и Simple Form.Rails 4: не нужно заполнять таблицу пользователей правильной информацией

Мой контроллер это:

class UserController < ApplicationController 
    def create 
    User.create(user_params) 
    end 

    private 

    def user_params 
     params.require(:user).permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation]) 
    end 
    end 

Моя форма для знака вверх выглядит следующим образом:

<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, autofocus: true %> 
    </div> 

    <div class="field"> 
    <%= f.label :profile_name %><br /> 
    <%= f.text_field :profile_name, autofocus: true %> 
    </div> 

    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %> 
    </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 %> 

Однако, когда я смотрю на данные в таблице, он показывает только электронную почту и поля пароля. Имя и фамилия, а также имя профиля не сохраняются в записи.

enter image description here

Есть ли что-то я пропустил здесь, что это предотвращение всех полей от сохранения на создание нового пользователя? Попытка выяснить, что я пропустил здесь!

ответ

2

Попробуйте изменить свой ApplicationController (самый быстрый способ) в соответствии с документацией:

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

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :first_name << :last_name << :profile_name 
    end 
end 

Проверка по part of documentation.

Надеюсь, что это поможет!

PS. 1.

Если вы хотите настроить контроллер, вам необходимо:

  1. Генерировать один (ваш выглядит, как вы создали по своему усмотрению).

    рельсов генерировать Завещание: контроллеры [Scope]

  2. Настройки генерируется контроллер:

    класса Пользователи :: SessionsController < Разрабатывает :: SessionsController # ваших здесь настроек # # GET/ресурс/sign_in # def новый # супер # конец ... конец

Отметьте this часть документации.

PS. 2.

В своем коде вы имеете строку:

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

это должно привести к синтаксической ошибке (я удивлен, если он не делает). вы должны удалить ] в конце списка:

params.require(:user).permit(:first_name, :last_name, :profile_name, :email, :password, :password_confirmation]) 
+0

Thanks Pawel! Это решило ошибку для меня, и я полностью пропустил эту часть документации Devise относительно сильных параметров. – iamryandrake

Смежные вопросы