Giter Club home page Giter Club logo

acts_as_taggable_redux's Introduction

ActsAsTaggableRedux
===================

Allows for user owned tags to be added to multiple classes, and makes tags easier to work with.


Prerequisites
=============

Install Edge Rails before you get started so you get RESTful routing.

ActsAsTaggableRedux depends on database tables to store tagging information.  Create the migration for these tables with this command:

  rake acts_as_taggable:db:create

Then run the migration to create the tables with this command:

  rake db:migrate

Also you will need to add this to your user model:
  acts_as_tagger

OPTIONAL: The helper functions assume the pressence of a tags controller, that is what the tag clouds and tags will link to.

OPTIONAL: To pretty up tag clouds and lists you can generate an example stylesheet with this command:

  rake acts_as_taggable:stylesheet:create

and then include this in your layouts that have tag clouds:

  <%= stylesheet_link_tag 'acts_as_taggable_stylesheet' %>


Example
=======

The following is an example of how you might integrate tags with an Item model.

config/routes.rb
  may.resource :items, :tags


app/views/items/new.erb
  <h1>New Item</h1>
  <% form_for(:item, @item) do |f| -%>
    <%= error_message_for :item %>
    <b>Tags:</b> <%= f.text_field :tag_list -%>
    <%= submit_tag "Save" -%>
  <% end -%>

if you want users to own taggings change the tags line to this
  <b>Tags:</b> <%= f.text_field :tag_list, :value => @item.tag_list(user) -%>
and add this line beneath it
  <%= f.hidden_field :user_id, :value => user.id -%>

app/views/items/show.erb
  Item tagged with:
  <% item.tags.each do |tag| -%>
    <%= link_to_tag(tag) %>
  <% end -%>

app/views/items/edit.erb
  <h1>New Item</h1>
  <% form_for(:item, @item, :html => { :method => :post }) do |f| -%>
    <%= error_messages_for :item %>
    <b>Tags:</b> <%= f.text_field :tag_list -%>
    <%= submit_tag "Save" -%>
  <% end -%>


app/controllers/items_controller.rb
  class ItemController < ApplicationController
    def new
      @item = Item.new
    end

    def create
      @item = Item.new(params[:item])

      respond_to do |format|
        if @item.save
          flash[:notice] = 'Item was successfully created.'
          format.html { redirect_to item_url(@item) }
          format.xml  { head :created, :location => item_url(@item) }
        else
          format.html { render :action => "new" }
          format.xml  { render :xml => @item.errors.to_xml }
        end
      end
    end

    def show
      @item = Item.find(params[:id], :include => :tags)
    end

    def edit
      @item = Item.find(params[:id])
    end

    def update
      @item = Item.find(params[:id])

      respond_to do |format|
        if @item.update_attributes(params[:item])
          flash[:notice] = 'Item was successfully updated.'
          format.html { redirect_to item_url(@item) }
          format.xml  { head :updated, :location => item_url(@item) }
        end
          format.html { render :action => "edit"}
          format.xml  { render :xml => @item.errors.to_xml}
      end
    end
  end



Tag clouds
==========

Tag clouds are created by a helper function, and depend on the counter cache to get fast accurate counts.  To ensure this keeps working properly, don't add new tags to a taggable in any way other than using the tag.tag(taggable) style.  This will ensure that the caches don't lose track.  Also, see the prerequisites for installing the stylesheet so that the tag cloud actually looks like a tag cloud.  Otherwise, just pop into a view that you want the tag cloud to appear and type this:

  <%= tag_cloud %>



Contributing
============

Welcoming all pull requests on github.com at http://github.com/monki/acts_as_taggable_redux/tree/master or git://github.com/monki/acts_as_taggable_redux.git



Major Updates
=============

The User class to which this plugin/gem refers is not being used in this particular project. All instances of "user" and "username" have been changed to "owner" and "name", respectively, in order to work with the intended super-project.

-Akshay Shah, 2009-10-05, http://github.com/akshayshah/acts_as_taggable_redux/tree/master




Copyright (c) 2008 monki(Wesley Beary), released under the MIT license

acts_as_taggable_redux's People

Contributors

maxjustus avatar skwp avatar jsyrjala avatar pka avatar nagybence avatar bjeanes avatar

Stargazers

Akshay Shah avatar

Watchers

Akshay Shah avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.