2
votes

I got the following error when I clicked on the "Create user" button.

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

I am following the below reference link and typed same command and same code given. http://railscasts.com/episodes/206-action-mailer-in-rails-3?view=asciicast

My code snippets are described below.

In app/controller/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

In config/initializer/setup_mail.rb

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

In app/mailer/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

app\views\user_mailer\registration_confirmation.text.erb

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

Please help me for resolve this error as i am totaly new to ROR. Thanks in Advance.

2

2 Answers

1
votes

In Rails 4 there is concept of Strong Parameter.

Strong Parameter in rails

To fixed this issue you need to change you create method and call @user = User.new(user_params) methods instead.

0
votes

Change

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

to

def create
  @user = User.new(user_params)