我之前发布过一个与此相关的问题,但不清楚。我已经简化了代码,所以我可以在这里复制它并让它尽可能简单。我仍然不确定调试它的最佳方法可能是什么,但它是这样的:
我对资源的“新”操作(实际上可能是任何)(同样,可以是任何):
def new
RDF::RDFa::Reader.open("http://www.tripadvisor.com/Hotel_Review-g186525-d280839-Reviews-Gerald_s_Place-Edinburgh_Scotland.html") do |r|
r.each_statement do |statement|
Rails.logger.debug(statement)
end
end
respond_to do |format|
format.html { }# new.html.haml
format.json { render json: @base_item }
format.js
end
end
页面渲染良好并且 RDF 代码运行成功,但是,当我刷新页面或尝试访问其他任何内容时,我得到以下内容(用我尝试访问的任何资源替换“base_item”,它们都失败了)错误):
ActionController::RoutingError (private method `redefine_method' called for #<Class:0x000001058527c0>):
app/models/base_item.rb:3:in `<class:BaseItem>'
app/models/base_item.rb:2:in `<top (required)>'
app/controllers/base_items_controller.rb:3:in `<top (required)>'
我想知道这是否是 rdf gem(使用 nokogiri)特有的东西,或者它是否是一般的路由问题,但还没有找到测试的方法。
任何帮助表示赞赏。
编辑:似乎它与 r.each_statement 行有关,就好像我把它拿出来一样,事情还在继续。
更新:我无法在 Rails 之外重现此问题,但我已将其范围缩小到 ActiveRecord 的问题。我在https://github.com/slamorsi/rdfTest设置了一个示例应用程序
有两个模型,Test 和 TestChild。如果 Test 和 TestChild 相关,则该错误是可重现的 - 现在 Test 与 TestChild 具有 has_many 关系。应用程序的根目录是 test#index,其中包含示例 RDF/RDFa 代码。如果您加载页面一次然后刷新,您将看到“重新定义方法调用...”错误。如果模型之间没有关系,或者没有 RDF/RDFa statements.each 代码被执行,一切正常。我不知道可能是什么原因造成的。