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 コードは正常に実行されますが、ページを更新するか、他の何かにアクセスしようとすると、次のようになります (アクセスしようとしているリソースが何であれ、それらはすべて失敗しますエラー):

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 ステートメントが実行されていない場合、各コードはすべて正常に動作します。何がこれを引き起こす可能性があるのか​​ わかりません。

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 に答える