Наверное одной из самых популярных вещей, которые реализуют буквально все, это тэггирование постов, фотографий, всего. Тэги помогают лучше ориентироваться, ведь если что-то находится в категории например "javascript", то это совсем не значит, что во всех постах будет описываться работа с ajax или с prototypejs. Поэтому тэги помогают отобрать из пачки постов\фотографий нужные.
Как же это делается в rails?
Всё просто, есть gem acts-as-taggable-on, который позволяет расставлять тэги. Я покажу как это делается для постов.
Что у нас есть? Во-первых -- это модель Post + контроллер + представления.
Всё это сгенерировано
Затем добавляем в модель следующее:
Вот собственно и всё. Проще, чем кажется на первый взгляд.
Документация по gem'у покажет некоторые хорошие вещи, которые можно сделать.
преведущий пост
Как же это делается в rails?
Всё просто, есть gem acts-as-taggable-on, который позволяет расставлять тэги. Я покажу как это делается для постов.
Что у нас есть? Во-первых -- это модель Post + контроллер + представления.
Всё это сгенерировано
$ rails g scaffold post title:streing, content:textЗатем устанавливаем сам gem в Gemfile, просто добавляя строчку:
gem 'acts-as-taggable-on'и выполняем bundle install. Всё установлено.
Затем добавляем в модель следующее:
class Post < ActiveRecord::Base acts_as_taggable_on :tags # <= это добавили attr_accessible :title, :content, :tag_list # <= и здесь записываем tag_list, если не запишем, то не сможем посмотреть тэги, будет вызвана ошибка. endВ контроллер также добавляем метод.
class PostsController < ApplicationController #для вывода облака тэгов def tag_cloud @tags = Post.tag_counts_on(:tags) end def index @posts = Post.all tag_cloud # <= отсюда обращаемся, чтобы получить все тэги end endВсё, теперь в представлении, я добавил, в application.html.erb, это для того, чтобы видно было на всех страницах, если вам нужно, чтобы облако было только на какой-то определённой странице, добавляйте в представление той страницы.
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %>
<% end %>
css1 css2 css3 css4 -- классы стилей для тэгов, от большого до маленького.Вот собственно и всё. Проще, чем кажется на первый взгляд.
Документация по gem'у покажет некоторые хорошие вещи, которые можно сделать.
преведущий пост
Вы забыли указать вьюшку, в которой пользователь будет заносить эти теги и они должны сохраняться в бд.
ОтветитьУдалитьКстати да. Но переделывать лень, напишу другой пост для rocket_tag.
Удалить