2

现在我有这样的东西

http://myapp.com/pages/1
http://myapp.com/pages/2
http://myapp.com/pages/3
http://myapp.com/pages/4

而且每一页都属于一个user

我需要的是让每个用户为页面设置自己的自定义名称。

我正在考虑使用friendly_idgem http://norman.github.com/friendly_id/ 但我没有找到任何方法来直接编辑 slug 以设置自定义友好 url

我应该如何进行?

4

6 回答 6

3

FriendlyID 是一个很棒的宝石。

实现用户定义的页面 URL 应该不难。pages使用user_idand创建表link

class User < ActiveRecord::Base
  has_many :pages

class Page < ActiveRecord::Base
  belongs_to :user

  has_friendly_id :link # link is name of the column whose value will be replaced by slugged value

在您添加属性page#new的输入。link

或者,您可以使用 :use_slug => true 选项在 title 或其他内容上设置 friendly_id。这样 FriendlyID 将获取标题并对其进行修改,使其没有和受限制的字符。它将使用它自己的表来存储蛞蝓。用于cached_slug提高性能。

更新

要让用户选择是否要设置自定义链接,您可以这样做:

  1. link在没有蛞蝓的场地上设置friendly_id ..
  2. 制作一个虚拟属性permalink,以便您可以在表单中显示它。
  3. 在 before_filter 中,检查是否permalink设置了。
  4. 如果是,请将其写入该link字段。
  5. 如果不是,请在该link字段中写入标题。

FriendlyID 使用babosagem 生成 slug。如果您也决定使用它,您的过滤器可能如下所示:

protected
  def generate_link
                #you might need to use .nil? instead
    self.link = self.permalink.empty? ? make_slug(self.title) : make_slug(self.permalink)
  end

  def make_slug(value)
    value.to_slug.normalize.to_s #you could as well use ph6py's way
  end
于 2011-07-14T17:29:26.060 回答
2

将 to_param 方法添加到其中一个模型应该会有所帮助:

def to_param
  "#{id}-#{call_to_method_that_returns_custom_name.parameterize}"
end

希望这就是你要找的:)

于 2011-07-14T17:25:07.243 回答
0

我没有使用friendly_url gem,也不确定我的方式是否有效。但它对我来说很好。

我有一个名为Nodewithid和友好 url 字段的模型,名为url_title.

我的routes.rb文件:

resource 'nodes/:url_title', :to => 'Nodes#view'

nodes_controller.rb

class NodesController <ActiveController
 def view
  @node = Node.find_by_url_title(:params(url_title))
 end
end

并使用该@node变量来填充您的视图。

现在,每当我输入 www.example.com/nodes/awesome-title 时,它​​都会将我带到正确的页面。反对这一点的一个论点可能是需要在非主字段上创建索引。但我认为即使在friendly_url gem 中也可能需要更好的性能。此外,非主字段url_title需要是唯一的。同样,即使正确工作也可能需要这样做friendly_url。如果我在这些假设中错了,请随时纠正我。

于 2011-07-14T21:31:07.457 回答
0

有多种方法,你可以做到这一点——

1) 使用 Stringex

2) sluggable-finder

3)friendly_id

可以在此处找到完整的分步方法以及每种方法的使用原因。快乐阅读!

于 2014-10-10T06:12:15.450 回答
0

如果您观看此截屏视频,它将向您解释。它很旧,但非常相关。

于 2011-07-14T23:53:36.507 回答
0

我使用friendly_id 4.x为此写了一篇文章。它将首先根据定义的属性创建一个 slug,然后允许用户使用表单对其进行更新。在这里查看:http: //fedible.org/posts/customizing-friendly_id-slugs

于 2013-03-23T04:21:03.587 回答