Tom*_*man 61 ruby-on-rails slug
你知道,比如myblog.com/posts/donald-e-knuth.
我应该使用内置parameterize
方法吗?
插件怎么样?我可以想象一个插件很适合处理重复的slug等.这里有一些流行的Github插件 - 有没有人对它们有任何经验?
基本上看起来slu is是一个完全解决的问题,我不会重新发明轮子.
gro*_*ser 214
在Rails中,您可以使用#parameterize
例如:
> "Foo bar`s".parameterize
=> "foo-bar-s"
Run Code Online (Sandbox Code Playgroud)
Paw*_*cki 51
生成slug的最佳方法是使用Unidecode gem.它是迄今为止最大的音译数据库.它甚至包含汉字的音译.更不用说涵盖所有欧洲语言(包括当地方言).它保证了防弹塞的创建.
例如,考虑那些:
"Iñtërnâtiônàlizætiøn".to_slug
=> "internationalizaetion"
>> "????".to_slug
=> "zhong-wen-ce-shi"
Run Code Online (Sandbox Code Playgroud)
我在我的ruby_extensions插件中的String.to_slug方法版本中使用它.有关to_slug方法,请参阅ruby_extensions.rb.
klo*_*ner 36
我会使用以下内容
def to_slug
#strip the string
ret = self.strip
#blow away apostrophes
ret.gsub! /['`]/,""
# @ --> at, and & --> and
ret.gsub! /\s*@\s*/, " at "
ret.gsub! /\s*&\s*/, " and "
#replace all non alphanumeric, underscore or periods with underscore
ret.gsub! /\s*[^A-Za-z0-9\.\-]\s*/, '_'
#convert double underscores to single
ret.gsub! /_+/,"_"
#strip off leading/trailing underscore
ret.gsub! /\A[_\.]+|[_\.]+\z/,""
ret
end
Run Code Online (Sandbox Code Playgroud)
所以,例如:
>> s = "mom & dad @home!"
=> "mom & dad @home!"
>> s.to_slug
> "mom_and_dad_at_home"
Run Code Online (Sandbox Code Playgroud)
这是我使用的:
class User < ActiveRecord::Base
before_create :make_slug
private
def make_slug
self.slug = self.name.downcase.gsub(/[^a-z1-9]+/, '-').chomp('-')
end
end
Run Code Online (Sandbox Code Playgroud)
非常自我解释,虽然唯一的问题是如果已经有相同的问题,它将不会是name-01或类似的东西.
例:
".downcase.gsub(/[^a-z1-9]+/, '-').chomp('-')".downcase.gsub(/[^a-z1-9]+/, '-').chomp('-')
Run Code Online (Sandbox Code Playgroud)
输出: -downcase-gsub-a-z1-9-chomp
如果有兴趣的话,我修改了一下来创建短划线而不是下划线:
def to_slug(param=self.slug)
# strip the string
ret = param.strip
#blow away apostrophes
ret.gsub! /['`]/, ""
# @ --> at, and & --> and
ret.gsub! /\s*@\s*/, " at "
ret.gsub! /\s*&\s*/, " and "
# replace all non alphanumeric, periods with dash
ret.gsub! /\s*[^A-Za-z0-9\.]\s*/, '-'
# replace underscore with dash
ret.gsub! /[-_]{2,}/, '-'
# convert double dashes to single
ret.gsub! /-+/, "-"
# strip off leading/trailing dash
ret.gsub! /\A[-\.]+|[-\.]+\z/, ""
ret
end
Run Code Online (Sandbox Code Playgroud)
Unicode gem 自 2007 年以来就没有更新过。
我推荐 stringex gem,它包含 Unidecoder gem 的功能。
https://github.com/rsl/stringex
看它的源码,似乎是对Unidecoder源码进行了重新打包,并添加了新的功能。
我的应用程序的主要问题是撇号 - 很少你想让-s坐在那里自己.
class String
def to_slug
self.gsub(/['`]/, "").parameterize
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47739 次 |
最近记录: |