以前、これに関する質問を投稿しましたが、不明でした。コードを単純化して、ここにコピーし、できるだけ簡単にできるようにしました。これをデバッグする最善の方法が何であるかはまだわかりませんが、次のようになります。
リソースに対する私の「新しい」アクション(実際には何でもかまいません)(これもまた、何でもかまいません):
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 コードは正常に実行されますが、ページを更新するか、他の何かにアクセスしようとすると、次のようになります (アクセスしようとしているリソースが何であれ、それらはすべて失敗しますエラー):
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 の 2 つのモデルがあります。Test と TestChild が関連している場合、エラーは再現可能です。現在、Test は TestChild と has_many の関係にあります。アプリのルートは、サンプルの RDF/RDFa コードを含む test#index に移動します。ページを一度ロードしてから更新すると、'redefine method called...' エラーが表示されます。モデル間に関係がない場合、または RDF/RDFa ステートメントが実行されていない場合、各コードはすべて正常に動作します。何がこれを引き起こす可能性があるのか わかりません。