Bha*_*rat 1 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
Run Code Online (Sandbox Code Playgroud)
然后我从继承自BaseDatatable的类中调用上面委托的h方法(除了link_to),如下所示:
class TypeWellsDatatable < BaseDatatable
private
def row(type_well)
ret_array = []
...
ret_array << h(phases)
...
end
...
end
Run Code Online (Sandbox Code Playgroud)
这在Rails 3.2.16中工作正常,但在Rails 4.0.2中抛出以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
似乎ActiveSupport gem在Rails 4.0.2中将此方法设为私有,这对我来说没有任何意义(或者我只是不明白).我的问题是:绕过这个问题的侵入性最小的方法是什么?还有许多其他类继承自BaseDatatble类并使用相同的技术.
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |