1

私のアプリには、記事とコメントのモデルがあります。返信機能を実装したので、ユーザーは引用したいコメントの ID を次のようにコメント フォームに入力するだけで別のコメントに返信できます: #26 (ID 26 のコメントを引用する)。これはすべて、regex と user_id attr への返信で正常に動作します:
私の comments_controller 作成アクションから抽出:

  if @comment.content.match(/(#([1-9]+))\s/)
  iteration_fragment = $2
  iteration_id = %Q{#{ iteration_fragment }}
  if @replied_to_comment = @article.comments.where(:iteration_id => iteration_id).first
    @comment.in_reply_to_user_id = @replied_to_comment.user_id
  end
  end

ここで、新しいモデルを作成せずに、コメント システムの上に「html ヘルパー レイヤー」を配置して、「#33」などのこれらのフラグメントが自動的に「#33」オンマウスオーバー リンクに変換されるようにします。コメント 33 onmouseover の内容。だから私は bb コードの引用はしたくありませんが、むしろミニマリストになりたいのです。
私が探しているものと、それにどのようにアプローチすべきか、誰かが知っていますか?

4

1 に答える 1

1

自動という言葉は、これを行うことができる唯一の方法はjQueryを使用することだと私に思わせます。

$("input#your_selected_input").keyup(function(){
  $this = $(this);
  if ($this.val().match(/(#([1-9]+))\s/) {
    $matches = $this.val().match(/(#([1-9]+))\s/
    $this.parent().after($this.html().replace( $matches[0], $("<a/>").html()));
  }
});

それが自動部分です。

Railsのコンテンツでページをロードするには、次のようになります。

コメントモデルで

def special_sauce_text
   matches = content.match(/(#([1-9]+))\s/)
   magic_sauce_links = []
   new_content = content
   if matches.present?
     for match in matches do
       magic_sauce_link << link_to(match, match, :class => 'your-special-stuff')
       new_content.gsub(match, magic_sauce_link)
     end
   end
   return new_content
end

次に、次のように自由に適用します。

Comment.special_sauce_text
于 2012-06-16T01:54:19.633 に答える