string.parameterize
不指定任何字符會給你字符串的話分離,除去這不是一個字母的任何字符,並與'-'
「加入」 它們:
string = 'Donald E. Knuth'
string.parameterize
# => "donald-e-knuth"
這種方式指定的隔板:
string.parameterize(separator: '*')
# => donald*e*knuth
的方法作用使用I18n.transliterate
方法到p稱職的字符串,然後應用破壞性gsub!
這將檢查所有非字母字符和應用的替代,就像是要做到:
# without separator specified
I18n.transliterate(string).gsub!(/[^a-z0-9\-_]+/i, 'separator')
# => Donald-E-Knuth
所以這種方式如果沒有指定的分隔,該方法有一個已定義爲它的第三個參數:
def parameterize(string, sep = :unused, separator: '-', preserve_case: false)
...
end
的使用注意事項是第一string
,然後parameterize
方法調用,不像文檔體現了什麼。
注:在測試了紅寶石2.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
在Rails < 5,必須使用ActiveSupport::Inflector.parameterize(string, separator)
:
> @item = Item.first
# => #<Item id: 1, name: "new item" ...>
> ActiveSupport::Inflector.parameterize(@item.name, '*')
# => "new*item"
很確定你在文檔'parameterize(「Donald E. Knuth」,separator:'_')'中使用它。你的字符串是什麼?什麼鐵軌版本? – radubogdan
Rails 4.2.6;當我將這行輸入到rails控制檯時,我得到錯誤'NoMethodError:undefined method' parameterize'for main:Object' – Adam12344
我認爲在使用它之前,你需要在控制檯中包含ActiveSupport :: Inflector。 – radubogdan