我正在尝试从文本框中删除[]
之间的任何内容。这适用于edit
记录格式:
<%= 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 %>
解决了错误问题,但也删除了过程中的输入文本框。
答案 0 :(得分:3)
您希望if
仅应用于:value参数,而不是整个f.text_field。 Put()围绕:value value
<%= f.text_field :transport_relay, :value => (f.object.transport_relay.match(/\[(.*?)\]/)[1] if f.object.transport_relay) %>
答案 1 :(得分:1)
好的gem称为和gem 来处理这个问题(&#34;未定义的方法`any_method&#39;对于nil:NilClass&#34;)。
答案 2 :(得分: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 %>
答案 3 :(得分:0)
试试这个:def nil.match; nil end