0

这是用于显示错误消息的代码

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
  unless html_tag =~ /^<label/
    "<span class=\"field_with_errors\">#{html_tag}</span>".html_safe
  else
    "#{html_tag}".html_safe
  end
end

但是,最好不要unlesselse一起使用。所以我做了

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
  if html_tag !=~ /^<label/
    "#{html_tag}".html_safe
  else
    "<span class=\"field_with_errors\">#{html_tag}</span>".html_safe 
  end
end

它不工作。

我知道这是因为"!=~". 那么,我该如何改变它以使其工作?

4

3 回答 3

4

你应该只使用=~. 以下给出与原始代码相同的结果unless

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
  if html_tag =~ /^<label/
    "#{html_tag}".html_safe
  else
    "<span class=\"field_with_errors\">#{html_tag}</span>".html_safe 
  end
end
于 2012-08-27T08:13:31.357 回答
4

!=~不是 Ruby 运算符,因此它实际上标记为!= ~,这是一个完全不同的操作。因此,html_tag !=~ /^<label/实际上测试html_tag != ~/^<label/等于html_tag != nil,这将始终为真。

你可以在这里看到这个:

>> "x" !=~ nil
NoMethodError: undefined method `~' for nil:NilClass
    from (irb):104
    from :0

你应该只使用 plain =~

于 2012-08-27T08:21:45.517 回答
3

上面的替代解决方案是使用 !~ 运算符,它是 =~ 的倒数。

于 2012-08-27T08:41:23.793 回答