0

I want to create a slug for my model which depends on a column of a related model. Is that possible?

Here is what I've thought:

# Example::User class
extend FriendlyId
friendly_id user.username, use: :slugged
belongs_to :user, class_name: "::User"

I get the following error:

NoMethodError: undefined method `username' for nil:NilClass


Edit: How records are created.

I have a User and Example::User model.
When running:

User.create(email: "demo@example.com", name: "demo", password: "12345678").encrypted_password

a Example::User record gets automatically created:

# User class
before_action :create_example_user

has_one :example_user, class_name: "Example::User"

def create_example_user
    Example::User.create(user_id: self.id)
end
heroxav
  • 1,387
  • 1
  • 22
  • 65

1 Answers1

1

Try something like this

extend FriendlyID
friendly_id user_username, use: :slugged
belongs_to :user

def user_username
  user.username
end

Edit:

Because your example user is trying to reference the user prior to the user being saved, it is causing the error.

Changing

def create_example_user
    Example::User.create(user_id: self.id)
end

to

def create_example_user
    self.build_example_user
end

may fix the problem

kobaltz
  • 6,980
  • 1
  • 35
  • 52