Фильтрация хэштегов с помощью Ruby on Rails

Новый программист Rails здесь. Вероятно, есть довольно простое решение для этого, но я просто не могу понять его. Вот в чем дело: допустим, у меня есть много сообщений на одной странице. У каждого поста есть поле контента, и некоторые из этих полей контента содержат #хэштеги внутри контента.

Я хочу разработать алгоритм, который сканирует содержимое каждого отдельного сообщения (скажем, каждые 2 секунды) и отображает список всех хэштегов. Я думаю, что AJAX будет необходим, потому что в сообщениях есть возможность редактирования AJAX на месте. Таким образом, если сообщение изменено и создан новый хэштег, список хэштегов должен автоматически обновляться, чтобы отразить это. Кроме того, каждый хэштег в списке хэштегов должен быть кликабельным, отправляя поисковый запрос и, в свою очередь, отображая сообщения, содержащие выбранный хэштег.

Этот конечный результат аналогичен тегам и облаку тегов, но должен быть динамичным и интегрированным (в отличие от наличия поля тега для каждого сообщения). Я не хочу прикреплять теги к сообщениям в качестве столбца базы данных. Я просто хочу, чтобы приложение сканировало содержимое каждого отдельного сообщения и отображало интерактивный список хэштегов.

Все предложения очень ценятся.


person aguynamedloren    schedule 09.12.2010    source источник


Ответы (1)


Лично я бы использовал jQuery для реализации необходимых вам функций AJAX. Javascript будет использоваться для проверки сервера на наличие новых хэштегов, а фактический поиск хэштегов будет выполняться на сервере. В вашей модели Post у вас может быть что-то вроде этого для фактического поиска:

class Post < ActiveRecord::Base
  # class methods
  class << self
    def hashtags
      tags = []

      # cycle through all posts that contain a hashtag, and add them to list
      Post.all(:conditions => 'body like "%#"').each do |post|
        tags += post.hashtags
      end

      # remove duplicates and sort alphabetically
      tags = tags.uniq.sort
    end
  end

  # instance methods
  def hashtags
    @hashtags ||= body.scan(/#\w+/)
  end
end

Здесь есть два метода с одинаковыми именами, но один вызывается в классе (Post.hashtags), чтобы получить все хэштеги во всех сообщениях, а второй вызывается в одном экземпляре (post.hashtags), чтобы получить только хэштеги из этого сообщения.

Есть несколько других частей головоломки — ваш код контроллера, ваши представления и ваш javascript. Этот вопрос является сложной задачей для волонтерского сайта. Вы просите, чтобы для вас сделали несколько разных вещей.

Мой совет: начните строить так, как я описал, и попросите помощи в тех частях, с которыми у вас возникли проблемы на этом пути. Мы более чем рады помочь, но вы просите полный стек MVC на основе javascript. Постарайтесь ограничить свои вопросы вопросами, на которые можно ответить в течение 5-10 минут, и вы, вероятно, получите гораздо больше отзывов и помощи.

Удачи!

person Jaime Bellmyer    schedule 09.12.2010
comment
Спасибо за помощь! Я знал, что в головоломке есть и другие части, но это именно то, что я искал, чтобы начать. - person aguynamedloren; 09.12.2010