Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3.2 从rails 3.2.16升级到rails 4.0.2时出现的问题——NoMethodError——私有方法`h';要求_Ruby On Rails 3.2_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 3.2 从rails 3.2.16升级到rails 4.0.2时出现的问题——NoMethodError——私有方法`h';要求

Ruby on rails 3.2 从rails 3.2.16升级到rails 4.0.2时出现的问题——NoMethodError——私有方法`h';要求,ruby-on-rails-3.2,ruby-on-rails-4,Ruby On Rails 3.2,Ruby On Rails 4,我正在尝试从Rails 3.2.16应用程序升级到Rails 4.0.2,并遇到以下问题 我有一个名为BaseDataTable的类,如以下代码段所示: class BaseDatatable delegate :h, :link_to, to: :@view ... end 然后我从继承自BaseDatatable的类调用上面委托的h方法(除了link_to),如下所示: class TypeWellsDatatable < BaseDatatable private

我正在尝试从Rails 3.2.16应用程序升级到Rails 4.0.2,并遇到以下问题

我有一个名为BaseDataTable的类,如以下代码段所示:

class BaseDatatable
  delegate  :h, :link_to, to: :@view
  ...
end
然后我从继承自BaseDatatable的类调用上面委托的h方法(除了link_to),如下所示:

class TypeWellsDatatable < BaseDatatable

  private

  def row(type_well)
    ret_array = []
    ...
    ret_array << h(phases)
    ...
  end
  ...
end
class TypeWellsDatatableret_arrayh当然是html_转义的别名。从Rails3开始,所有字符串都是html转义的。Rails 4仍然在ActiveView::Base(实际上是ERB::Util)上将html_escape显示为公共方法,但在我使用的Rails的4.0.2版本中,view_上下文返回false以响应

Rails 4不再允许显式调用html_escape,这一点我并不感到惊讶。这与迁移到白名单是一致的,这意味着您必须声明字符串是安全的,以便它们不会被转义。否则就假定它们是不安全的


Net是一个简单的应用程序,您只需摆脱对h的调用并使用裸字符串即可。

h当然是html\U escape的别名。从Rails3开始,所有字符串都是html转义的。Rails 4仍然在ActiveView::Base(实际上是ERB::Util)上将html_escape显示为公共方法,但在我使用的Rails的4.0.2版本中,view_上下文返回false以响应

Rails 4不再允许显式调用html_escape,这一点我并不感到惊讶。这与迁移到白名单是一致的,这意味着您必须声明字符串是安全的,以便它们不会被转义。否则就假定它们是不安全的


Net是一个很好的解决方案,您只需摆脱对h的调用,使用空字符串即可。

这很有意义。谢谢,这很有道理。谢谢
NoMethodError - private method `h' called for #<#<Class:0x00000107c8d2c0>:0x00000100ed8310>:
  app/datatables/base_datatable.rb:2:in `h'
  app/datatables/type_wells_datatable.rb:22:in `row'
  app/datatables/base_datatable.rb:13:in `block in as_json'
  activerecord (4.0.2) lib/active_record/relation/delegation.rb:13:in `map'
  app/datatables/base_datatable.rb:13:in `as_json'
  activesupport (4.0.2) lib/active_support/json/encoding.rb:50:in `block in encode'
  activesupport (4.0.2) lib/active_support/json/encoding.rb:81:in `check_for_circular_references'
  activesupport (4.0.2) lib/active_support/json/encoding.rb:49:in `encode'