0

我有一个网站可以在前提下工作:

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

默认情况下,我为文章启用了唯一的 slug,但是我希望每个用户在所有用户中都有唯一的 slug。

非唯一性是通过使用来处理的@user.articles.friendly.find(param)

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

4

2 回答 2

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. ID #1 名为“Hello”的文章将具有永久链接/user_id/news/hello
  2. ID 为 #2 的文章也命名为“Hello”,将具有永久链接/user_id/news/hello-2

如果您不想使用该 gem,则可以使用Rails验证。

它看起来像这样:

class Article < ActiveRecord::Base
  extend FriendlyId
  belongs_to :user

  validates_uniqueness_of :permalink, scope: :user_id

好旧的validates_uniqueness_of

我希望它有所帮助。

于 2013-07-07T05:27:39.633 回答
1

A如果你有一个 has_many through: 关联,你可以将 slug 存储在第三个模型中......这是唯一可以存储用户和文章唯一数据的地方。

    @user.articles_users.friendly.find(param).each do |association|
      Articles.find(association.article_id)
    end
于 2013-07-05T22:48:21.190 回答