这似乎是一个愚蠢的问题,但我如何parameterize在 Rails 中使用?我看过这个文档:http : //api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize
在我的模型中,我可以开始string.parameterize工作,但我不明白如何使用separator参数。parameterize(string, separator: '')说我不能在 main 上使用参数化,并string.parameterize(separator: '')说不能从 Hash 隐式转换为 String
string.parameterize不指定任何字符将为您提供由单词分隔的字符串,删除任何不是字母的字符,并“加入”它们'-':
string = 'Donald E. Knuth'
string.parameterize
# => "donald-e-knuth"
Run Code Online (Sandbox Code Playgroud)
这样指定一个分隔符:
string.parameterize(separator: '*')
# => donald*e*knuth
Run Code Online (Sandbox Code Playgroud)
该方法I18n.transliterate对传递的字符串使用该方法,然后应用破坏性gsub!检查任何非字母字符并应用替换,就像这样做:
# without separator specified
I18n.transliterate(string).gsub!(/[^a-z0-9\-_]+/i, 'separator')
# => Donald-E-Knuth
Run Code Online (Sandbox Code Playgroud)
因此,如果没有指定分隔符,则该方法已将其定义为第三个参数:
def parameterize(string, sep = :unused, separator: '-', preserve_case: false)
...
end
Run Code Online (Sandbox Code Playgroud)
请注意,使用首先是方法调用,string然后是parameterize方法调用,这与文档中举例说明的不同。
注意:在 ruby2.3.1和 Rails上测试5.0.2它运行良好, Rails 4.2.5,4.2.6(如您所说)并4.2.7抛出此错误:
Loading development environment (Rails 4.2.5)
> string = 'x y z'
# => "x y z"
> string.parameterize(separator: '*')
TypeError: no implicit conversion of Hash into String
Run Code Online (Sandbox Code Playgroud)
在 Rails < 5 中,它必须用作ActiveSupport::Inflector.parameterize(string, separator):
> @item = Item.first
# => #<Item id: 1, name: "new item" ...>
> ActiveSupport::Inflector.parameterize(@item.name, '*')
# => "new*item"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2458 次 |
| 最近记录: |