2014-12-13 2 views
1

У меня возникла следующая ошибка, когда я нажал кнопку «Создать пользователя».Как устранить ошибку «ActiveModel :: ForbiddenAttributesError»

Error: 
ActiveModel::ForbiddenAttributesError 

Extracted source (around line #27): 
25 # POST /users.json 
26 def create 
27 @user = User.new(params[:user]) 
28 respond_to do |format| 
29 if @user.save 

Я следую приведенной ниже ссылке ссылки и набрал ту же команду и тот же код. http://railscasts.com/episodes/206-action-mailer-in-rails-3?view=asciicast

Модные фрагменты кода описаны ниже.

В приложении/контроллер/user_controller.rb

class UsersController < ApplicationController 
    before_action :set_user, only: [:show, :edit, :update, :destroy] 

    # GET /users 
    # GET /users.json 
    def index 
    @users = User.all 
    end 

    # GET /users/1 
    # GET /users/1.json 
    def show 
    end 

    # GET /users/new 
    def new 
    @user = User.new 
    end 

    # GET /users/1/edit 
    def edit 
    end 

    # POST /users 
    # POST /users.json 
    def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
    if @user.save 
     UserMailer.registration_confirmation(@user).deliver 
     format.html { redirect_to(@user, :notice => 'User was successfully created.') } 
     format.xml { render :xml => @user, :status => :created, :location => @user } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
    end 
    end 
    end 

    # PATCH/PUT /users/1 
    # PATCH/PUT /users/1.json 
    def update 
    respond_to do |format| 
     if @user.update(user_params) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { render :show, status: :ok, location: @user } 
     else 
     format.html { render :edit } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /users/1 
    # DELETE /users/1.json 
    def destroy 
    @user.destroy 
    respond_to do |format| 
     format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
     params.require(:user).permit(:name, :email) 
    end 
end 

В конфигурации/инициализатор/setup_mail.rb

ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => "gmail.com", 
    :user_name   => "[email protected]", 
    :password    => "[email protected]", 
    :authentication  => "plain", 
    :enable_starttls_auto => true 
} 

В приложении/почтовая программа/user_mailer.rb

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 
    def registration_confirmation(user) 
    mail(:to => user.email, :subject => "Registered", :from => "[email protected]") 
    end 
end 

приложение \ views \ user_mailer \ registration_confirmation.text.erb

<%= @user.name %>, 
Thank you for registering! 

Пожалуйста, помогите мне решить эту ошибку, так как я новичок в ROR. Заранее спасибо.

ответ

0

Изменить

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

в

def create 
    @user = User.new(user_params) 
1

В Rails 4 есть понятие Strong параметра.

Strong Parameter in rails

Чтобы устранили эту проблему вам нужно изменить вам create метод и вызвать @user = User.new(user_params) методы вместо.

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