Фильтрация хештега с помощью Ruby on Rails - PullRequest
0 голосов
/ 09 декабря 2010

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

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

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

Все предложения приветствуются.

1 Ответ

0 голосов
/ 09 декабря 2010

Лично я бы использовал 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 минут, и вы, вероятно, получите гораздо больше отзывов и помощи.

Удачи!

...