Как пометить пользователей в фиде, как это делают Facebook или Twitter? - PullRequest
3 голосов
/ 21 октября 2011

HI Я работаю над приложением рельсов.Я хочу реализовать пользовательские теги, как в Facebook или Twitter.Когда пользователь публикует в ленте, он может пометить любого пользователя символом @ при запуске.

Я использую Плагин автозаполнения интерфейса пользователя Jquery .

У меня есть эта ссылка Реализация автозаполнения пользовательского интерфейса jquery для отображения предложений при вводе «@» , что помогло мне реализовать автозаполнение части.

Но теперь я хочу связать это автоматически завершенное имя пользователя с URL профиля пользователя, например, Имя пользователя = Мак, тогда ссылка должна быть сгенерирована как

<a href="http://www.example.com/username">Username</a>

Так что, пожалуйста, объясните мне, как я могу реализовать это в моемПриложение рельсы? Есть ли драгоценный камень, чтобы сделать это.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

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

<% @str = @madyrocks solved problem of @username tagging %>

<%=@result_string = @str.gsub(/(\^|\s|\B)@(([a-zA-Z])(_?[a-zA-Z0-9]+)*|_([a-zA-Z0-9]+_?)*)/i, 
%Q{ <a href="http://example.com/\\2">\@\\2</a>}) %>

В своем регулярном выражении я использовал (\^|\s|\B), потому что @ может появляться в начале строки или после пробела при пометке пользователя.

([a-zA-Z])(_?[a-zA-Z0-9]+)*|_([a-zA-Z0-9]+_?)* Используется для проверки имени пользователя.В моем приложении имя пользователя должно начинаться с алфавита, за которым следуют алфавиты и цифры.

Номер нет. 2 используется для получения второго совпадения в регулярном выражении.

Для более подробной информации попробуйте регулярное выражение на Rubular.com

Я надеюсь, что это поможет другим.

1 голос
/ 21 октября 2011

Если вы хотите сделать это, вы должны написать специальные методы установки / получения для содержимого публикации. Простой пример:

В модели (в данном примере столбец с постом называется «контентом»):

attr_reader :set_content
attr_accessor :set_content
attr_reader :get_content
attr_accessor :get_content
def set_content=(content)   

     users = content.scan(/\@(.*)\ /)
     users.each do |user_name|
          user = User.find_by_name(user_name[1])
          content.gsub!("@#{user_name[1]}", "|UID:#{user.id}|") unless user.nil?
     end
     self.content=content
end

def get_content
     current_content=self.content
     users = self.content.scan(/\|UID\:([0-9]*)\|/)
     users.each do |user_id|
          user = User.find(user_id[1])
          current_content.gsub!("|UID:#{user_id[1]}|", "<your link stuff here>")
     end
     current_content
end

Тогда вы должны использовать эти методы установки / получения в частичном. Я только что написал это «из моей головы», там может быть какая-то синтаксическая чушь, но я думаю, что вы понимаете, о чем я говорю!

Преимущество этого метода в том, что вы также можете изменять имена пользователей, поскольку вы сохраняете идентификатор пользователя в момент создания постов.

...