2017-04-12 45 views
0

這看起來像一個愚蠢的問題,但我如何在Rails中使用parameterize?我已經看到了這個文檔:http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize如何在Rails的參數化中更改分隔符

在我的模型,我可以得到string.parameterize工作,但我不明白如何使用separator PARAM。 parameterize(string, separator: '')說我不能使用參數化的主,和string.parameterize(separator: '')說不能從隱式轉換哈希爲String

+0

很確定你在文檔'parameterize(「Donald E. Knuth」,separator:'_')'中使用它。你的字符串是什麼?什麼鐵軌版本? – radubogdan

+0

Rails 4.2.6;當我將這行輸入到rails控制檯時,我得到錯誤'NoMethodError:undefined method' parameterize'for main:Object' – Adam12344

+0

我認爲在使用它之前,你需要在控制檯中包含ActiveSupport :: Inflector。 – radubogdan

回答

1

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.54.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" 
+0

'string.parameterize(separator:'*')'不適合我。 'string ='xyz''。在Rails控制檯中出現'TypeError:沒有隱式轉換爲字符串'的錯誤 – Adam12344

+0

您可以添加整個代碼來嘗試重現您的問題嗎? –

+0

'rails c'; 'string ='xyz''; 'string.parameterize(separator:'*')'; – Adam12344