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
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