2014-07-17 29 views
0

我試圖從文本框中刪除任何不在[]之間的東西。這適用於edit記錄表:未定義的方法匹配爲零:NilClass

<%= f.text_field :transport_relay, :value => f.object.transport_relay.match(/\[(.*?)\]/)[1] %> 

,但是當我嘗試創建一個new記錄,它顯示"undefined method `match' for nil:NilClass"誤差預計,隨着新的紀錄指出,以配合。我如何處理這個問題?

我嘗試了幾種解決方案,即這樣的:

<%= f.text_field :transport_relay, :value => f.object.transport_relay.match(/\[(.*?)\]/)[1] if f.object.transport_relay %> 

解決誤差問題,而且去除的過程中輸入文本框。

回答

3

您希望if僅適用於:value參數,而不是整個f.text_field。把()圍繞:值值

<%= f.text_field :transport_relay, :value => (f.object.transport_relay.match(/\[(.*?)\]/)[1] if f.object.transport_relay) %> 
+0

這對我來說就像一個魅力:)。謝謝大家的投入和時間。 – galavantis

0

你可以把它寫像

<%= f.text_field :transport_relay, :value => f.object.transport_relay.nil? ? nil:f.object.transport_relay.match(/\[(.*?)\]/)[1] %> 

,但我認爲這將是更好,如果你提取的邏輯模型

def transport_relay_value 
    transport_relay.nil? nil:transport_relay.match(/\[(.*?)\]/)[1] 
end 

<%= f.text_field :transport_relay, :value => f.object.transport_relay_value %> 
0

嘗試這個:def nil.match; nil end

1

這是好的叫andan d gem來處理這個問題(「未定義的方法`any_method'爲nil:NilClass」)。

相關問題