我有一个网站,其前提是:
example.com/user_id/news/slug-for-article
默认情况下,我为文章启用了独特的slugs,但是我想在所有用户中为每个用户设置独特的slug。
使用@user.articles.friendly.find(param)
处理非唯一性。
如何设置它以确保唯一性,但仅限于已定义的属性?
答案 0 :(得分:3)
我会使用friendly_id。
看起来像这样:
class Article < ActiveRecord::Base
extend FriendlyId
belongs_to :user
friendly_id :name, use: :scoped, scope: :user, slug_column: :permalink
如果有人选择了相同的文章名称,friendly_id
会计算出与现有文章名称不相冲突的slug
。
所以,例如:
/user_id/news/hello
/user_id/news/hello-2
如果您不想使用该gem,则可以使用Rails
验证。
看起来像这样:
class Article < ActiveRecord::Base
extend FriendlyId
belongs_to :user
validates_uniqueness_of :permalink, scope: :user_id
我希望它有所帮助。
答案 1 :(得分:1)
如果您有一个has_many通过:关联,您可以将slu存储在第三个模型中......它是唯一可以存储用户和文章所特有的数据的地方。
@user.articles_users.friendly.find(param).each do |association|
Articles.find(association.article_id)
end