RoR:friendly_id对用户来说是唯一的

时间:2013-07-05 21:49:26

标签: ruby-on-rails ruby routes friendly-id

我有一个网站,其前提是:

example.com/user_id/news/slug-for-article

默认情况下,我为文章启用了独特的slugs,但是我想在所有用户中为每个用户设置独特的slug。

使用@user.articles.friendly.find(param)处理非唯一性。

如何设置它以确保唯一性,但仅限于已定义的属性?

2 个答案:

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

所以,例如:

  1. 名为“Hello”的ID为1的文章将具有永久链接/user_id/news/hello
  2. 名为“Hello”的id#2的文章将具有永久链接/user_id/news/hello-2
  3. 如果您不想使用该gem,则可以使用Rails验证。

    看起来像这样:

    class Article < ActiveRecord::Base
      extend FriendlyId
      belongs_to :user
    
      validates_uniqueness_of :permalink, scope: :user_id
    

    好老validates_uniqueness_of

    我希望它有所帮助。

答案 1 :(得分:1)

如果您有一个has_many通过:关联,您可以将slu存储在第三个模型中......它是唯一可以存储用户和文章所特有的数据的地方。

    @user.articles_users.friendly.find(param).each do |association|
      Articles.find(association.article_id)
    end