0
記事やアイテムのpostgresデータベースを持つレールアプリがあります。私は記事のテキストをレンダリングするたびに何らかの形でテキストをスキャンし、データベース内のアイテムの名前と一致する単語を見つけたら、そのアイテムのshow_pathに自動リンクします。レンダリングされたテキスト内の、データベースの項目名と一致するすべての単語を自動リンクする方法はありますか?
アイデア?とても有難い。
記事やアイテムのpostgresデータベースを持つレールアプリがあります。私は記事のテキストをレンダリングするたびに何らかの形でテキストをスキャンし、データベース内のアイテムの名前と一致する単語を見つけたら、そのアイテムのshow_pathに自動リンクします。レンダリングされたテキスト内の、データベースの項目名と一致するすべての単語を自動リンクする方法はありますか?
アイデア?とても有難い。
第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
方法が削除されます。
ありがとうございます!あなたのアプローチは素晴らしいと思いますが、他の誰かが興味を持っている場合に備えて報告書に戻ってきます。 – ania