Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Список джемов Rails проекты      Поиск   

Ruby On Rails in UA/Rails plugins и фичи/Plugin - Acts As Taggable On Steroids

2008-06-10 11:28:07 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1226
Регистр: 2007-03-13
его блог 40 сообщ.
Plugin - Acts As Taggable On Steroids
  •  
Для начала инсталируем плагин
Получение списка популярных тегов и подсчетом и сортировкой



Создаем db_migration_taggable_on_steroids-database-schema.rb


Базовое использование

Для начала добавим строчку acts_as_taggable к /models/posts.rb:

class Post < ActiveRecord::Base
acts_as_taggable

belongs_to :user
end

После чего мы сможем тегировать записи таблицы Post, и сможем использовать методы tag_list и tag_list=.


p = Post.find(:first)
p.tag_list # ""
p.tag_list = "Funny, Silly"
p.save
p.reload.tag_list # "Funny, Silly"

Tag можно посчитать

Для подсчета колличества индивидуальных тегов можно использовать Post.tag_counts. Для этого нам необходимо подключить к таблице пользователей ектеншин для подсчетов:

class User < ActiveRecord::Base
has_many :posts, :extend => TagCountsExtension
end

Этот екстеншин позволяет нам посчитать колличество тегов так:

User.find(:first).posts.tag_counts

Информация частично позаимствована с сайтов
http://www.dotrb.com/2007/1/28/acts_as_taggable_on_steroids-database-schema
http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids

но планируется пополнить эту статью так как у меня сразу не получилось прикрутить теги а именно получитьсписок тегов в RHTML файле.

В некоторый примерах и исходниках проектов я нашел слудующую реализацию
------------
Занимаюсь вебом и продвижением сайтов.
, ,
2008-06-09 15:30:06 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1226
Регистр: 2007-03-13
его блог 40 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
Поиск тегированых объектов

Для поиска затегированых обектовм можно воспользоваться функцией find_tagged_with.

Post.find_tagged_with('ruby , rails')

По умолчанию, find_tagged_with будут находить только объекты с такими тегами. Для поиска всех обектов которые имеют такие теги используйте match_all.

Post.find_tagged_with('ruby , rails', :match_all => true)
------------
Занимаюсь вебом и продвижением сайтов.
, ,
2008-06-10 07:04:27 Ответить  
xxxYURAxxx
Толстик Юрий
Адрес: Minsk
Сообщений: 31
Регистр: 2007-06-03
его блог 0 сообщ.
RE: RE: Plugin - Acts As Taggable On Steroids
  •  
можно я немного испорчу страничку...

получаю ошибку: undefined method `tag_with' for #
код:
new.rhtml

Теги:



news_controller.rb
def new
@user = User.find(:all)
@priorities = Priority.find(:all)
redirect_to :action => 'list' if session[:user].blank?
@news = News.new
end

def create
@user = User.find(:all)
@priorities = Priority.find(:all)
@news = News.new(params[:news])
@news.tag_with(params[:tag_list])
if @news.save
redirect_to :action => 'list'
else
render :action => 'new'
end
end

news.rb
acts_as_taggable

что я сделал не так?
2008-06-08 14:46:54 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1226
Регистр: 2007-03-13
его блог 40 сообщ.
RE: RE: RE: Plugin - Acts As Taggable On Steroids
  •  
Я тоже сомтрел как написанов мануале только на других сайтах
после чего поправил манула на своем сайте по этому используй как ниже


При сохранении тоже

и будет все хорошо
------------
Занимаюсь вебом и продвижением сайтов.
2008-06-08 14:29:58 Ответить  
xxxYURAxxx
Толстик Юрий
Адрес: Minsk
Сообщений: 31
Регистр: 2007-06-03
его блог 0 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
такой код не работает ссылаясь на отсутствие метода tagged
def tag
@tag = Tag.find_by_id(params[:id]).tagged
end

и соответственно нету запроса вида ~/news/tag/1

хотя решение с поиском по тегу имеет более удобочитаемый вид ~/news/tag/linux :)
2008-06-10 08:56:54 Ответить  
Hermes
Hermes
Адрес:
Сообщений: 20
Регистр: 2008-03-16
его блог 0 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
А как облако сделать?
2008-06-09 04:18:51 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1226
Регистр: 2007-03-13
его блог 40 сообщ.
RE: RE: Plugin - Acts As Taggable On Steroids
  •  
Для получения облака тегов я добавил метод в хелпер, который возвращает масив тегов случайно выбранных.
/app/aplication_helper


Потом Создаем ссылки на контроллер, который будет искать все сообщения с таким тегом.

layouts/footer.rhtml

------------
Занимаюсь вебом и продвижением сайтов.
2008-06-10 07:12:31 Ответить  
Hermes
Hermes
Адрес:
Сообщений: 20
Регистр: 2008-03-16
его блог 0 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
И как вывести теги в виде ссылок для конкретной записи?
2008-06-10 07:26:58 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1226
Регистр: 2007-03-13
его блог 40 сообщ.
RE: RE: Plugin - Acts As Taggable On Steroids
  •  
Если ты посмотришь внимательно на предыдущий пост то навернео увидишь как формируются ссылки на теги
------------
Занимаюсь вебом и продвижением сайтов.
2008-06-06 20:09:31 Ответить  
Hermes
Hermes
Адрес:
Сообщений: 20
Регистр: 2008-03-16
его блог 0 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
Точно, теги вывел так: tags: " + post.tags.collect{|t| link_to(t.name, :controller = 'sources', :action = 'recent', :tags = t )}.join(', ') ) if (post.tags.length 0) %



Теги выводятся нормально, но вот при добавлении или редактировании вываливается ошибка:

undefined method `find_or_create_with_like_by_name' for Tag(id: integer, name: string):Class

В контроллере:

if @post.update_attributes(params[:post])
#Сохраняем метки
@post.tag_list = params[:tags]
@post.save
2008-06-08 07:32:23 Ответить  
Hermes
Hermes
Адрес:
Сообщений: 20
Регистр: 2008-03-16
его блог 0 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
Ошибку нашёл - просто у меня была создана модель Tag


И все же что за гем такой acts_as_taggable ?
2008-06-09 14:41:43 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1226
Регистр: 2007-03-13
его блог 40 сообщ.
RE: RE: Plugin - Acts As Taggable On Steroids
  •  
Была версия act_as_taggable потом автор передумал и поменял сю идиологию и написал тегирование на стероидах, так что это первая версия плагина тегирования, которую сейчас не поддерживают.
------------
Занимаюсь вебом и продвижением сайтов.
2008-06-08 20:09:36 Ответить  
cthulhu
Станіслав Погребняк
Адрес: Жовті Води
Сообщений: 32
Регистр: 2008-02-09
его блог 1 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
Впросик к знатокам: что происходит с тагом когда он не используется?. Ответ замеченый мной - таг остается в таблице тагс. Что похоже на мемори лик (leak) - таги коплятся и не удаляются. Или я заблуждаюсь?
2008-06-07 11:15:04 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1226
Регистр: 2007-03-13
его блог 40 сообщ.
RE: RE: Plugin - Acts As Taggable On Steroids
  •  
я дума ю что он остается, но не задумылался об этом,
в принципе чтобы удлить его надо для начал а проверить не ссылается ли кто то еще на этот таг.

Так что думаю лучше всего его хранитьи не удалять
------------
Занимаюсь вебом и продвижением сайтов.
2008-06-09 16:41:54 Ответить  
cthulhu
Станіслав Погребняк
Адрес: Жовті Води
Сообщений: 32
Регистр: 2008-02-09
его блог 1 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
В принципе проверить можно ссылаются ли на тего друние тагированные. Но ИМХО лучше пока просто иметь ввиду. :) Пока не пишем приложений для высоко-нагрузочных сервисов.
, ,
2008-06-08 09:18:56 Ответить  
solbeg
Ochirov Tsyren
Адрес: Новосибирск
Сообщений: 40
Регистр: 2008-03-17
его блог 1 сообщ.
RE: Plugin - Acts As Taggable On Steroids
  •  
5.0 из 1 гол.
Мой перевод :)

Инструкция

Это плагин основан на плагине acts_as_taggable на DHH, но включает в себя дополнительные возможности, такие, как tests, smarter tag assignment и расчёт облако тегов(and tag cloud calculations).


Инстоляция

ruby script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids

Использование

Подготовка базы данных

Создайте и используйте миграции:

ruby script/generate acts_as_taggable_migration
rake db:migrate

Базовое тэггирование

Давайте предположим, пользователи имеют множество должностей, и мы хотим, чтобы эти должности, чтобы теги. Первый шаг заключается в том, чтобы добавить acts_as_taggable на пост класс:



Теперь мы можем использовать методы тэггирования, предусмотренные acts_as_taggable,
это # tag_list и # tag_list =. Оба этих методов работы, как очередной атрибут accessors.



Вы можете также добавлять или удалять массивы тэгов.


Поиск затэгированных объектов:

Чтобы найти объекты помечены определенного тегом, используем find_tagged_with.



По умолчанию, find_tagged_with найдёт все объекты, которые содержат данный тэг. Чтобы найти только те объекты, которые помечены заданным тегом, используем match_all.


See ActiveRecord::Acts::Taggable::InstanceMethods for more methods and options.

Tag cloud calculations
Чтобы создать облака тэгов, необходимо расчитать частоту каждого тега. Поскольку мы, тэгируем для Пост класса, то мы можем получить расчет всех тэгов вот так Post.tag_counts. Но что, если мы хотим рассчитывать тэг на одного пользователя в сообщениях? To achieve this we call tag_counts on the association:(? понятно но не могу точно превести):





Вот пример, который создает облако тегов.



View:


CSS:


Кэширование

Полезно для списка тегов, да бы сократить число запросов. Чтобы сделать это, добавьте столбец с именем cached_tag_list к модели, которая помечена. В колонке должено быть достаточно "места", чтобы впихнуть полный список тегов, значение по умолчанию нуль, а не пустая строка.



Чтобы обновить список кэшированных тегов вы должны вызвать save_cached_tag_list вручную.

Разделитель

Если вы хотите изменить разделитель, установите TagList.delimiter. Например, чтобы использовать пробелы вместо запятых, добавьте следующие в config/environment.rb:




---
О плагине:
Владелец: Jonathan Viney (jonathan.viney@gmail.com)

Репозиторий: http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids/

Лицензия: Rails' (MIT)

Мой перевод статьи acts_as_taggable_on_steroids
2008-07-30 23:16:03 Ответить  
Roman
Roman Smirnov
Адрес:
Сообщений: 15
Регистр: 2008-07-29
его блог 0 сообщ.
RE: RE: Plugin - Acts As Taggable On Steroids
  •  
[quote]По умолчанию, find_tagged_with найдёт все объекты, которые содержат данный тэг. Чтобы найти только те объекты, которые помечены заданным тегом, используем match_all.[/quote]

Это вы Промтом что ли переводили?

В оригинале
>By default, find_tagged_with will find objects that have any of the given tags. To
find only objects that are tagged with all the given tags, use match_all.
Что, исходя из моих скромных познаний в английском, означает примерно следующее:
По умолчанию, find_tagged_with будет искать объекты, отмеченные хотя бы ОДНИМ из переданных тегов. Чтобы найти только те объекты, которые отмечены ВСЕМИ переданными тегами, используйте match_all.

>Because we specified +acts_as_taggable+ on the Post class, we can
get a calculation of all the tag counts by using Post.tag_counts. But what if we wanted a tag count for an single user's posts? To achieve this we call tag_counts on the association:

User.find(:first).posts.tag_counts

Так как мы помечаем класс Post как acts_as_taggable, мы можем получить данные об общем кол-ве тегов, используя Post.tag_counts. Но что если мы хотим узнать кол-во тегов для сообщений одного конкретного пользователя? Чтобы добиться этого, мы можем вызвать метод tag_counts для ассоциированных с пользователем сообщений:
User.find(:first).posts.tag_counts


P.S. Надеюсь, эти поправки кому-нибудь помогут.. :-)
Назадназад Новыйновый Ответитьответить
Ключевые слова:
Гости: 99 Онлайн: fguest, Алексей ,
Rambler's Top100
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008