Search code examples
ruby-on-railsurlrelationshipfriendly-id

Rails: friendly_id slug relationship


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

Solution

  • 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