未定义的方法`匹配'为零:NilClass

时间:2014-07-17 07:57:16

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试从文本框中删除[]之间的任何内容。这适用于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 %>

解决了错误问题,但也删除了过程中的输入文本框。

4 个答案:

答案 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