0

私のウェブサイトでは、ユーザーが投稿できるようにしています

これは、現在の Post create コントローラーの外観です

     def create
      @post = current_user.posts.build(params[:post])
    if @post.save
      flash[:success] = "Posted!"
      redirect_to home_path
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

「browse」という新しいページを作成し、すべてのハッシュタグを降順で一覧表示したいと考えています。これらのハッシュタグは、上記の投稿から取得されます。ハッシュタグ (1 つの投稿で使用される 1 つまたは 2 つ以上のハッシュタグ) をプルして、この新しい閲覧ページに表示する最良の方法は何ですか?

4

1 に答える 1

1

正規表現を使用して、ハッシュタグをテキストから引き出すことができます。ここにスレッドがあります: Best HashTag Regexその投稿は .NET に関するものですが、正規表現は非常に普遍的であるため、そこで何かを使用できるはずです。(正規表現のテストにはRubularをお勧めします)。これは人気があるようです:

hashtag_regex = /\b#\w\w+/

これで、次の方法でハッシュタグを引き出すタイミングを選択できます。

オプション 1

ユーザーが参照ページをロードすると、「リアルタイムで」それらを引き出すことができます。これはおそらくコーディングが簡単になりますが、柔軟性に欠けます。ハッシュタグで投稿を検索したり、特定のハッシュタグの出現回数を数えたりすることはおそらくできないでしょう。この場合、たとえば次のように、参照ページによってレンダリングされたビューでハッシュタグを抽出できます。

<% @posts.each do |post| %>
  Text: <%= post.text %>. Hashtags: <%= post.text.scan(hashtag_regex).join(',') %>
<% end %> 

オプション 2

投稿が作成/編集されたときにハッシュタグを抽出し、それらを Post モデルの新しいフィールドまたは関連付けられたモデル ( Post has_many :hashtags) に次のように保存できます。

def create
  @post = current_user.posts.build(params[:post])
  @post.hashtags = @post.text.scan(hashtag_regex)

または、投稿モデルのコールバックとして:

class Post < AR:B
  before_save :extract_hashtags

  def extract_hashtags
    hashtags = text.scan(hashtag_regex)
  end
end

次に、それらを表示します。

<% @posts.each do |post| %>
  Text: <%= post.text %>. Hashtags: <%= post.hashtags %>
<% end %>

このアプローチはおそらくもう少し効率的で、データベース内のハッシュタグを独自のフィールドまたはテーブルに配置することで、それらで並べ替えたり、検索したり、数えたりすることができます.

これがお役に立てば幸いです。

于 2013-04-29T18:03:17.473 に答える