【问题标题】:Rails wraps fields with errors by divRails 用 div 包装有错误的字段
【发布时间】:2011-07-18 07:29:23
【问题描述】:

当验证未通过时,如何阻止 Rails 更改我的代码。

每次 rails 用

包裹我的领域
<div class='field_with_error'>...</div>

我可以编辑fields_with_error

.fields_with_error{ display: inline }

这行得通,但它很hacky

【问题讨论】:

  • 真的没有办法防止这种情况发生吗?

标签: ruby-on-rails ruby validation forms


【解决方案1】:

没关系。使用 CSS 的东西而不是这样做。

ActionView::Base.field_error_proc = Proc.new 做 |html_tag, instance_tag| “#{html_tag}” 结尾

我觉得更hacky :)

【讨论】:

  • 它更 hacky,真的 :) 但我希望有一个简单的解决方案,比如关掉 Rails 来更改我的代码
  • rails 如何“改变你的代码”?如果 rails 正在包装它,那么您正在使用 rails helpers。如果您不想要,请不要使用这些帮助器,或者编写您自己的表单构建器帮助器。
  • 对我不起作用,它只是将其显示为文本,然后这个 config.action_view.field_error_proc = Proc.new { |html_tag, instance| html_tag } 对我有用。 link。笔记。我正在使用 Rails 5
【解决方案2】:

我在 environment.rb 中使用它。更 hacky ;-)

#
# Fix annoying <div class="fieldsWithError"> wrapping after validation
# http://dev.rubyonrails.org/ticket/3587
#

ActionView::Base.field_error_proc = Proc.new { |html_tag, instance| 
  msg = instance.error_message 

  if html_tag =~ /<(input|textarea|select)[>]+class=/
    class_attribute = html_tag =~ /class=['"]/ 
    html_tag.insert(class_attribute + 7, "error ") 
  elsif html_tag =~ /<(input|textarea|select)/
    first_whitespace = html_tag =~ /\s/ 
    html_tag[first_whitespace] = " class='error' "
  end 

  html_tag
}

【讨论】:

    【解决方案3】:

    您也可以使用 jQuery 来完成。仍然感觉像一个黑客,但它的工作原理。

    $('.field_with_errors input').unwrap();
    

    【讨论】:

    • 确实,这在非常特殊的情况下会有所帮助。谢谢!
    • 如果你的用户没有运行 JS,他们会有不同的行为。为此使用 JS 是多余的。
    猜你喜欢
    • 2013-04-29
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多