2017-08-04 117 views
1

我想初始化集合通過得到一個NameError(未定義的局部變量或方法`「_」「)

c = Collection.new(name: current_user.account.name + "_" + @form.form_name, description: @form.form_name,account: @form.account, data_types: columns, formats: columns) 

的事情是,這個本地工作,但對生產我得到這個錯誤

NameError (undefined local variable or method `「_」' for #<FormsController:0x0000001007a890>): 

我一直在試圖弄清楚這一點在過去的幾個小時,但無濟於事

回答

3

您使用的是一種錯誤的引號的源代碼。檢查"之間的差異。他們看起來很相似,但Ruby只使用第一種類型來表示一個字符串 - 第二種類型像任何其他字符一樣被解釋,所以ruby認爲你試圖向字符串中添加一個名爲「_」的變量,然後拋出這個錯誤,告訴你它認爲你試圖使用的變量不存在。

如果您從其他地方(如教程網站)複製代碼並粘貼它,經常會發生這種情況,因爲有時會使用錯誤的字符來顯示教程或任何內容。

它有時也談到有關,如果你使用的是不是主要設計用來編寫代碼的編輯,因爲他們中的一些自動在開始和末,當你寫報道的講話,看起來可愛更換" ,但破壞代碼!


在一個側面說明,寫

current_user.account.name + "_" + @form.form_name 

是使用串插,像這樣的一個更紅寶石十歲上下的方式:

"#{current_user.account.name}_#{@form.form_name}" 

'string' + 'string'格式是完全有效的語法,但字符串插值通常更具可讀性,不易出錯,並由ruby style guide推薦。正如@sawa指出的那樣,它在使用的計算資源方面也更加高效。

+2

它也更經濟。帶'+'的那個創建時間子字符串,然後立即丟棄。 – sawa

相關問題