我之前发过一个与之相关的问题,但目前还不清楚。我已经简化了代码,所以我可以在这里复制它,让它尽可能简单明了。我仍然不确定调试它的最佳方法是什么,但在这里:
我的'新'动作(可能是任何真正的)资源(同样,可以是任何):
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语句,则执行代码,一切正常。我不知道是什么原因造成的。
答案 0 :(得分:1)
RDF gem不使用Nokogiri,但是RDF :: RDFa gem。例如,您可以尝试使用Turtle输入文件运行它,看看是否得到相同的结果。
可查询#each_statement确实使用了迭代器,但我没有看到它如何影响您运行的上下文。您可能会查看是否已在@base_item上定义了任何新方法。可能是某些RDF类正在定义干扰Rails的方法,这可能是一个bug。
如果你能做一个简短的例子,我可以进一步研究它。向http://github.com/gkellogg/rdf/issues提交问题(如果不是特定于RDF :: RDFa),或者另外提交rdf-rdfa /问题。