2014-03-31 5 views
2

Я использую программу для регистрации пользователей. Я настраиваю действие create контроллера регистрации, однако всякий раз, когда я пытаюсь создать любого нового пользователя, ему отказывают, и я получаю указанную ошибку. Я знаю, что должен разрешить необходимые параметры, и я делаю это, поэтому я не понимаю, почему я продолжаю получать ошибку. Пыль - это мои испытания до сих пор.ActiveModel :: ForbiddenAttributesError при использовании устройства для регистрации

#user model 
class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :confirmable 
    belongs_to :country 
    #rest of the code 
end 

## Custom registeration controller 
class RegistrationsController < Devise::RegistrationsController 
    def create 
     @user = User.new(params[:user]) 
     if @user.save 
      sign_in(@user, bypass: true) 
      redirect_to user_employee_steps_path(@user), 
    notice: 'A confirmation email was sent to your email, please complete your profile 
      and confirm your account to start looking for potential employees' 
     else 
      render 'new' 
     end 
    end 
end 

#new.html.erb the view for the registration sign up 
<h2>Sign up</h2> 

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

    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %></div> 

    <div><%= f.label :first_name %><br /> 
    <%= f.text_field :first_name %></div> 

    <div><%= f.label :last_name %><br /> 
    <%= f.text_field :last_name %></div> 

    <div><%= f.label :dob, "Birthday" %><br /> 
    <%= f.date_select :dob, start_year: 1900, end_year: Time.now.year - 18 %></div> 

    <div><%= f.label :country_id, "Country" %><br /> 
    <%= f.select :country_id, Country.order(name: :asc).collect { |country| [country.name, country.id] }, prompt: 'Select your country' %></div> 

    <div><%= f.label :city %><br /> 
    <%= f.text_field :city %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password, autocomplete: "off" %></div> 

    <div><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %></div> 

    <div><%= f.submit "Sign up" %></div> 
<% end %> 

<%= render "users/shared/links" %> 

#application controller where I permit params for sign up 
class ApplicationController < ActionController::Base 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
     puts '%' * 30 
     devise_parameter_sanitizer.for(:sign_up) << [:first_name, :last_name, :country_id, :city, :dob] 
     puts devise_parameter_sanitizer.for(:sign_up) 
     puts '%' * 30 
    end 
end 

Теперь всякий раз, когда я создаю новый пользователь, я получаю указанную ошибку в названии, и результат этого заявления ставит, который публикуемое выглядят следующим образом:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
email 
password 
password_confirmation 
first_name 
last_name 
country_id 
city 
dob 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

, что означает, что метод configure_permitted_parameters был вызван правильно, и требуемые параметры должны быть уже там, поэтому я не понимаю, где проблема может быть ?! Я действительно застрял на этом, и любая помощь будет оценена по достоинству.

ответ

5

Проблема заключается в этой строке:

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

Вместо этого, может быть, вы должны попробовать

@user = User.new sign_up_params 

Если вы хотите, чтобы лучше понять, почему, читайте больше о сильных параметров и Rails 4. http://weblog.rubyonrails.org/2012/3/21/strong-parameters/

Или же придерживаться обработки изображения вы также можете написать

build_resource sign_up_params 

И тогда переменная ресурс даст вам доступ к пользователю, который можно сохранить, и т.д. ...

+0

ли sign_up_params вспомогательный метод доступен из завещанию? Если да, то какие другие помощники доступны (или как я могу узнать о них?). – Thresh

+0

Знак sign_up_params доступен! Вы можете использовать его непосредственно в своем контроллере. – Oxynum

+0

Я пробовал, и он работает спасибо, мой вопрос был в том, как он был доступен? был ли это метод, предоставляемый посредством разработки, и если да, то есть ли дополнительные вспомогательные методы, такие как этот, который предоставляется, и как я могу узнать о них? – Thresh

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