Ask A Question

Notifications

You’re not receiving notifications from this thread.

How to create a user that has a belongs_to association

David asked in General

Hi y'all!

I am brand new to the world of rails so please forgive my ignorance with this question :)

I am currently setting up a new app which has a two models:

  1. Account
  2. User

My seed file looks like this:

account = Account.create!(name: 'Account Name')

account.users.create!(
  first_name: 'Test',
  last_name: 'Test',
  email: 'test@test.com,
  password: 'test',
  owner: true
)

And the users model is:

class User < ApplicationRecord
  belongs_to :account
 ...
end

I have created a custom Devise registrations controller to let new users sign up:

class Users::RegistrationsController < Devise::RegistrationsController
  # GET /sign_up
  def new
    render inertia: 'Auth/Register', props: {}
  end

  # POST
  def create # rubocop:disable Lint/UselessMethodDefinition
    super
  end

  def sign_up_params
    params.require(:user).permit( :email, :password, :first_name, :last_name)
  end
end

BUT! I need to pre-create an account for a user before I actually create the user here and this is something I have been stuck on for a few days with no luck (to the point Ive considered changing the association's).

My best guess was I needed to do something like:

# POST
  def create # rubocop:disable Lint/UselessMethodDefinition
    account = Account.create!(name: 'Test')
    account.users.create!(sign_up_params)
  end

to mimic the logic of the seeds file but this seems distinctly wrong to me and doesn't work.

So my question is, is it possible and how can I pre-create a Account model for a user and then associate it to the user in the registrations create method before the user is persisted to the database?

Thank you so much in advance for any help!

Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 87,400+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.