title: Assign random password to user on create
body: <p>I have a user table in my database and what I wish to do is have a
  random password generated for each user on create which is then sent to
  their email address. I was wondering how I would assign the random
  password.</p>
  
  <p>I have the following in my view:</p>
  
  <pre><code>&lt;p&gt;
      &lt;div id="p1"&gt;&lt;%= t('.username')%&gt;&lt;/div&gt;
      &lt;%= f.text_field :username %&gt;
  &lt;/p&gt;
  &lt;p&gt;
      &lt;div id="p1"&gt;&lt;%= t('.email')%&gt;&lt;/div&gt;
      &lt;%= f.text_field :email %&gt;
  &lt;/p&gt;
  &lt;p class="button"&gt;&lt;%= f.submit 'Create Account' %&gt;&lt;/p&gt;
  </code></pre>
  
  <p>The following in my controller:</p>
  
  <pre><code>def create
   @user = User.new(params[:user])
   respond_to do |format|
     if @user.save
      Notifier.user_created(@user).deliver
         format.html { redirect_to @user, notice: 'User was successfully created.' }
         format.json { render json: @user, status: :created, location: @user }
      else
         format.html { render action: "new" }
         format.json { render json: @user.errors, status::unprocessable_entity }
      end
    end
  end
  </code></pre>
  
  <p>And I have the following in my user model:</p>
  
  <pre><code>attr_accessor :password
  before_save :encrypt_password
  
  def encrypt_password
      if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
     end
  end
  
  def self.random_string(len)
      #generate a random password consisting of strings and digits
      chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a password = ""
      1.upto(len) { |i| password &lt;&lt; chars[rand(chars.size-1)]}
      return password
  end
  
  def self.authenticate(email, password)
      user = find_by_email(email)
      if user &amp;&amp; user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
      user
   else
      nil
   end
  end
  </code></pre>
  
  <p>I will have to remove my if password.present? line because it won't be present but I have the random string code, I just need to assign it to the hash/salt.</p>