2016-09-12 4 views
0

記事やアイテムのpostgresデータベースを持つレールアプリがあります。私は記事のテキストをレンダリングするたびに何らかの形でテキストをスキャンし、データベース内のアイテムの名前と一致する単語を見つけたら、そのアイテムのshow_pathに自動リンクします。レンダリングされたテキスト内の、データベースの項目名と一致するすべての単語を自動リンクする方法はありますか?

アイデア?とても有難い。

答えて

0

第1の原則からはずすことができます。

単語が記事に含まれている場合は、単語または記事へのリンクを返す小さなメソッドを作成します。

def make_link(word) 
    item = Item.find_by(text: word.downcase) 
    item ? link_to(word, item_path(item_id) : word 
end 

ここで、上記の方法で記事のすべての単語をマップし、リンク可能なものをリンクに変換します。 new_articleがレンダリングされたときにリンクタグを確保するために

new_article = ActionController::Base.helpers.sanitize(article).split(' ').map{|word| make_link(word)}.join(' ').html_safe 

html_safe方法はエスケープされず、ソースに不要なHTMLタグを確保するためにsanitize方法が削除されます。

+0

ありがとうございます!あなたのアプローチは素晴らしいと思いますが、他の誰かが興味を持っている場合に備えて報告書に戻ってきます。 – ania

関連する問題