Peter Tretiakov
Peter Tretiakov

Reputation: 3410

Create data in other tables when creating user

Good day.

I have 2 tables in my database (PostgeSQL): "Users" and "Folders". Folders are belongs_to :user and user has_many :folders. I need user, when creating his account automatically create one folder in folders table with name: "Default", id: 1, user_id: current_user.id. As I understand correctly, I need to edit create method in users_controller

This is my user.rb

# == Schema Information
#
# Table name: users
#
#  id              :integer          not null, primary key
#  name            :string(255)
#  email           :string(255)
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#  password_digest :string(255)
#  remember_token  :string(255)
#  admin           :boolean          default(FALSE)
#

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation
  has_secure_password
  has_many :folders, dependent: :destroy

  before_save { email.downcase! }
  before_save :create_remember_token

  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
  validates :password, length: { minimum: 6 }
  validates :password_confirmation, presence: true

  private

  def create_remember_token
    self.remember_token = SecureRandom.urlsafe_base64
  end
end

This is folder.rb

# == Schema Information
#
# Table name: folders
#
#  id         :integer          not null, primary key
#  name       :string(255)
#  user_id    :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
#

class Folder < ActiveRecord::Base
  attr_accessible :name
  belongs_to :user
  has_many :bookmarks, dependent: :destroy

  validates :user_id, presence: true
  validates :name, presence: true
end

And this is the create method from users_controller.rb

def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      redirect_to @user
      flash[:success] = "Welcome to Timio Bookmarks!"
    else
      if signed_in?
        redirect_to root_path
      else
        render 'new'
      end
    end
  end

Thanks for your help!

Upvotes: 0

Views: 43

Answers (1)

andrunix
andrunix

Reputation: 1754

Try something like:

@user.folders << Folder.new

before you do the save on the @user.save

Upvotes: 1

Related Questions