0

我之前发布过一个与此相关的问题,但不清楚。我已经简化了代码,所以我可以在这里复制它并让它尽可能简单。我仍然不确定调试它的最佳方法可能是什么,但它是这样的:

我对资源的“新”操作(实际上可能是任何)(同样,可以是任何):

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 代码被执行,一切正常。我不知道可能是什么原因造成的。

4

1 回答 1

1

RDF gem 不使用 Nokogiri,但 RDF::RDFa gem 使用。例如,您可以尝试使用 Turtle 输入文件运行它,看看是否得到相同的结果。

Queryable#each_statement 确实使用了迭代器,但我看不出这会如何感染您运行的上下文。您可能会查看是否在@base_item 上定义了任何新方法。可能是某些 RDF 类定义了干扰 Rails 的方法,这将是一个错误。

如果你能做一个简短的例子,我可以进一步看看。向http://github.com/gkellogg/rdf/issues提交问题(如果不是 RDF::RDFa 特定的),否则提交 rdf-rdfa/issues。

于 2011-09-28T21:00:10.910 回答