现在我有类似的东西
http://myapp.com/pages/1
http://myapp.com/pages/2
http://myapp.com/pages/3
http://myapp.com/pages/4
每个页面属于一个user
我需要的是每个用户为页面设置自己的自定义名称。
我在考虑使用friendly_id
gem http://norman.github.com/friendly_id/
但我没有找到任何方法来直接编辑slug来设置自定义友好网址
我该怎么办?
答案 0 :(得分:3)
FriendlyID是一个伟大的宝石。
实现用户定义的页面URL应该不难。
使用pages
和user_id
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
属性添加输入。
或者,您可以在标题或其他内容上设置friendly_id:use_slug =&gt;真正的选择。这样,FriendlyID将获取标题并对其进行修改,使其不具有和限制字符。它将使用它自己的表来存储slu ..使用cached_slug
来增加性能。
更新
要让用户选择是否要设置自定义链接,您可以这样做:
link
字段中设置friendly_id而不使用slugs .. permalink
,以便您可以在表单中显示它。permalink
是否已设置。link
字段。link
字段。 FriendlyID使用babosa
gem生成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
答案 1 :(得分:2)
将to_param方法添加到其中一个模型应该会有所帮助:
def to_param
"#{id}-#{call_to_method_that_returns_custom_name.parameterize}"
end
希望这是你要找的东西:)
答案 2 :(得分:0)
我没有使用friendly_url gem,也不确定我的方式是否有效。但它对我来说很好。
我有一个名为Node
的模型id
和友好的网址字段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
进行正确的工作,也可能需要这样做。
如果我在这些假设中错了,请随意纠正我。
答案 3 :(得分:0)
如果你看this screencast,,它会向你解释。它已经过时了,但它非常相关。
答案 4 :(得分:0)
我已经使用friendly_id 4.x为此写了一篇文章。它将首先根据定义的属性创建一个slug,然后允许用户使用表单更新它。请在此处查看:http://fedible.org/posts/customizing-friendly_id-slugs。
答案 5 :(得分:0)