Сейчас на сайте

Сейчас 6 гостей онлайн

Поиск

Tag Cloud

Twitter oAuth и Cod... Баллада о г... сихи лирик... стихи лири... Динамическ... Домашняя с... Использова... Использова... Отправка с... Создание ф... Шепот посл... TinyMCE в Rails стихи лири... Быстрая ра... Пишем собс... Создание с... Установка ... Ностальгия... Москва-Бел... стихи лири... Стихи про п... Крылья сти... Создание п... Простой по... Создание п... Одинокий в... Гражданин ... Несчастный... Сонет стих... Отрезок ст... Врагу не сд... Предчувств... Поиск в ст... Использова... Смерть дву... Использова... Как сделат... Как сделат... Облако тег... Южная сере... Программна... Codeigniter в де... CodeIgniter: фор... проверка в... стихи лири... WEB fetcher(scrappe... Простой Twitt... стихи твор... стихи лири... Побег с Сол... Отправка SMS... MS VSTO 2007/Infusio... Установка R... Степные тр... моя любовь. К твоим оз... Сомкнуть л... чтоб отдат... вот – вот ... еще не расс... Снег тишина и лу... и мира пово... что мой пос... Лишь ты. И т... ты любима ты чиста. Экспорт да... Я пью до дн... что нам теп... -Наш первый... Социальные... Социальные... Спит в можж... Воздух про... Стены рожденные ... эхо умрет. Неотправле... стихи лири... Он порезал... Боясь шагн... не осталос... Услышать з... Программир...

Облако тегов с помощью Ruby on Rails PDF Печать E-mail
02.06.2011 17:38

Облако тегов - это технология, которая позволяет представить набор данных в визуальном виде на веб странице .Естественно, что данные принадлежат текущему сайту или приложению. В Ruby on Rails существует gem Acts As Taggable On. Пользоваться им очень просто и удобно. Рассмотрим такой пример использования данного gema.

Предположим, у нас есть Ruby on Rails приложение, которое отображает каталог магазинов. То бишь, данные представлены в виде 2 таблиц, одна из которых отображает список магазинов ,а другая – товары, которые имеются в этих магазинах. Связаны таблицы по внешнему ключу “shop_id в таблице products”. Модели и контроллеры уже существуют.

 

CREATE TABLE `shops` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`shortdesc` varchar(255) DEFAULT NULL,

`longdesc` text,

`status` enum('active inactive') DEFAULT NULL,

`parentid` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `products` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`shortdesc` varchar(255) DEFAULT NULL,

`longdesc` text,

`thumbnail` varchar(255) DEFAULT NULL,

`image` varchar(255) DEFAULT NULL,

`sizes` enum('s','m','''l'', ''x') DEFAULT NULL,

`colors` enum('red','blue','green','brown','''white'''',‘black"') DEFAULT NULL,

`grouping` varchar(16) DEFAULT NULL,

`status` enum('active','inactive') DEFAULT NULL,

`shop_id` int(11) DEFAULT NULL,

`featured` enum('true','false') DEFAULT NULL,

`price` float(4,2) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Теперь нужно установить сам Acts As Taggable On.Для этого в командной строке нашего приложения вводим:

C:\catalog>gem install mbleigh-acts-as-taggable-on --source http://gems.github.c

om

Successfully installed mbleigh-acts-as-taggable-on-1.0.5

1 gem installed

Installing ri documentation for mbleigh-acts-as-taggable-on-1.0.5...

Installing RDoc documentation for mbleigh-acts-as-taggable-on-1.0.5...

Установка gema завершена. Теперь запустить скрипт миграции для создание таблиц базы данных gema:

C:\catalog>ruby script/generate acts_as_taggable_on_migration

create db/migrate

create db/migrate/20110602140242_acts_as_taggable_on_migration.rb

C:\catalog>rake db:migrate

(in C:/catalog)

== ActsAsTaggableOnMigration: migrating ======================================

-- create_table(:tags)

-> 0.0940s

-- create_table(:taggings)

-> 0.1090s

-- add_index(:taggings, :tag_id)

-> 0.3130s

-- add_index(:taggings, [:taggable_id, :taggable_type, :context])

-> 0.1720s

== ActsAsTaggableOnMigration: migrated (0.6880s) =============================

Получаем 2 таблицы базы данных такого вида:

CREATE TABLE `taggings` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`tag_id` int(11) DEFAULT NULL,

`taggable_id` int(11) DEFAULT NULL,

`tagger_id` int(11) DEFAULT NULL,

`tagger_type` varchar(255) DEFAULT NULL,

`taggable_type` varchar(255) DEFAULT NULL,

`context` varchar(255) DEFAULT NULL,

`created_at` datetime DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `index_taggings_on_tag_id` (`tag_id`),

KEY `index_taggings_on_taggable_id_and_taggable_type_and_context` (`taggable_id`,`taggable_type`,`context`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `tags` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Далее нам нужно обязательно добавить в файл модели каталога такую строчку:

Class Catalog < ActiveRecord::Base
acts_as_taggable_on :tags
end

Она инициализирует gem и позволяет использовать его в работе класса модели и связывает с существующим таблицами приложения. Теперь в классе котроллера методе “create” нам нужно ввести такой код:

def create

@catalog = Catalog.new(params[:catalog])

@catalog.tag_with(params[:tag_list])

Эта строка будет заполнять данные для вновь созданного облака тегов, то есть заполнять необходимые поля в таблицах базы данных.Кроме того, в форме “/app/views/catalog/new”, которая отправляет эти данные надо создать поле для ввода тегов:

<label for="tags_list">Tags:</label>

<%= text_field_tag 'tag_list', @catalog.tags.collect{|t|

t.name}.join(" ") %>

И на конец, редактируем форму, которая отображает данные по выбранному пользователем магазину, файл “/app/views/catalog/show

<% unless @catalog.tags.blank? %>

<p><strong>Tags:</strong>

<%= @catalog.tags.collect{|tag| link_to tag.name,

:action => 'tag', :id => tag}.join(", ") %></p>

<% end %>

Это все, облако тегов доступно в нашем приложении.

0
Обновлено 12.07.2011 00:01
 

Добавить комментарий


Защитный код
Обновить