2010-12-19 2 views
0

テキストを解析して、テキストに含まれるWebアプリケーションのエンティティにリンクする方法を探しています。それを明確にするために、のは、例として、このテキストを見てみましょう:テキストを解析してdbレコードに一致させてリンクに変換する(Rails 3)

Stoner rock and stoner metal are two related sub-genres of hard rock and heavy metal respectively, both combining elements of psychedelic rock, blues-rock, traditional heavy metal and doom metal. The genre emerged during the early 1990s and was pioneered foremost by the Californian bands Kyuss and Sleep.

私は、テキストの上に表示されるすべてのジャンル、バンドやアルバムをリンク(と私のWebアプリの実体として存在)したいのですが、このように:どのだろう、データベース内のレールコードを格納

  1. <a href="/genre/1">Stoner rock</a> and stoner metal are two related sub-genres of hard rock and <a href="/genre/2">heavy metal</a> respectively, both combining elements of psychedelic rock, blues-rock, traditional <a href="/genre/2">heavy metal</a> and <a href="/genre/4">doom metal</a>. The genre emerged during the early 1990s and was pioneered foremost by the Californian bands <a href="/band/1">Kyuss</a> and <a href="/band/2">Sleep</a>.

    私は、次のようなさまざまな選択肢を、と思ってきました

  2. テキストを挿入する前にデータベースを完全に検索し、
    aをリンクしてください(augly and insecure)。保存する前にすべてのエンティティをリンクにして変換するか、
    b。エンティティIDを区切りの列に格納し、アンカータグを配置してビューに配置し、各エンティティIDをアンカータグと組み合わせます。

私は本当に賢明でなければならないと思いますこれを処理する方法。より良いアプローチを提案できますか?私はルビーオンレール3.

答えて

0

疑似コードを使用しています:

Keywords.find_each do |keyword| 
    text.gsub!(keyword, link_to keyword, some_path_for(keyword)) 
end 

をあなたが持っているどのように多くのキーワードによっては、この作業は非常にCPUを集中することがあります。最初にテキストをDBに格納し、バックグラウンドワーカー(ResqueやDelayed :: Jobなど)に各テストを処理させることを検討してください。

元の(リンクされていない)テキストが処理されるまで表示します。リンクされていないテキストとリンクされたテキストには、2つの異なるテーブルフィールドを使用することをお勧めします。

+0

良いアプローチのようなサウンドです、ありがとうございます。 – pabloroman

関連する問題