mongoid / mongoid-slug

Generates a URL slug/permalink based on fields in a Mongoid-based model.
https://github.com/mongoid/mongoid-slug
MIT License
492 stars 164 forks source link

Question re: generating paths/urls when using scoped slug #237

Open raphaelcm opened 7 years ago

raphaelcm commented 7 years ago

Apologies for posting a question here, but I searched for a long time and couldn't find the answer.

I'm creating a slug on User that is scoped to Company. Everything works well, except generating paths/urls.

user_achievements_path(@user) generates /users/robert/achievements, but there are multiple roberts who belong to different companies, so the achievement action retrieves the wrong robert when it does a standard lookup of User.find(params[:id]).

Changing @user to @user.id works, but I'd rather not have to do that all over the place. Is there a more elegant solution?

Thank you.

dblock commented 7 years ago

It sounds like the path is wrong, it should include the company in there, shouldn't it? How is that user_achievements_path generated? AFAIK that's not something that comes from mongoid-slug.

raphaelcm commented 7 years ago

no, the path is not the issue. These are all working paths - the only change is the addition of mongoid-slug.

raphaelcm commented 7 years ago

The question is, is there a setting or change we can make to force the url/path generators to use the ID of an object, rather than the slug?

dblock commented 7 years ago

I honestly don't know, I'll leave this open maybe you can dig this up?

artfuldodger commented 7 years ago

Overriding User#to_param to return id will result in the default url generation being fixed. mongoid-slug overrides it to return the slug here: https://github.com/mongoid/mongoid-slug/blob/master/lib/mongoid/slug.rb#L281