rails

Tags mit Rails-Plugin acts-as-taggable-on implementieren

Implementieren Sie Tag-Funktionalität mit dem Ruby on Rails-Plugin acts-as-taggable-on. Was Sie mit diesem Plugin tun können, umfasst: Erstellen einer Tag-Listenseite, Anzeigen einzelner Tag-Seiten und Modellinformationen, die mit Tags versehen sind, Tag-Suche (ODER-Suche/UND-Suche/Minus-Suche usw.), Hinzufügen und Löschen von Tags, Batch-Hinzufügen und Bearbeiten von Tags für jedes Modell usw.

Shou Arisaka
3 Min. Lesezeit
18. Okt. 2025

Implementieren Sie Tag-Funktionalität mit dem Ruby on Rails-Plugin acts-as-taggable-on.

Was Sie mit acts-as-taggable-on tun können

  • Tag-Listenseite
  • Einzelne Tag-Seiten; Modellinformationen anzeigen, die mit Tag A versehen sind (schwer zu erklären)
  • Tag-Suche (ODER-Suche/UND-Suche/Minus-Suche usw.) (kann mit anderen Suchmechanismen unter Verwendung von Mengenoperationen kombiniert werden)
  • **Mehrere Tags hinzufügen/löschen; kann Tags für jede Modellinstanz stapelweise hinzufügen oder bearbeiten**. Denken Sie an die Tag-Bearbeitung von Niconico Douga.
Das meiste, was Sie wahrscheinlich implementieren möchten, kann getan werden. Dieses Plugin ist ziemlich erstaunlich. Ich könnte niemals selbst Tags von Grund auf implementieren... ## Implementierung Installation ```ruby # add gemfile gem 'acts-as-taggable-on', '~> 6.0'

commands

bundle install rake acts_as_taggable_on_engine:install:migrations rake db:migrate

Controller und Modell bearbeiten
```ruby
class User < ActiveRecord::Base
  acts_as_taggable # Alias for acts_as_taggable_on :tags
  acts_as_taggable_on :skills, :interests
end

class UsersController < ApplicationController
  def user_params
    params.require(:user).permit(:name, :tag_list) ## Rails 4 strong params usage
  end
end

Mysql scheint etwas mehr Konfiguration zu benötigen, aber ich werde es auslassen.

Mit rails c überprüfen.

@user = User.new(:name => "Bobby")
@user.tag_list.add("awesome")   # add a single tag. alias for <<
@user.tag_list.remove("awesome") # remove a single tag
@user.save # save to persist tag_list

Konkretes Beispiel

@hashmodel = Hashmodel.find(1)
@hashmodel.tag_list = "hoge,fuga"
@hashmodel.save
Hashmodel.find(1).tag_list #=> ["hoge", "fuga"]
Hashmodel.find(6).tag_list #=> ["foo", "fuga"]

Hashmodel.tagged_with("fuga").by_join_date.ids

Sie können auch mehrere Tags als durch Kommas getrennte Zeichenfolge wie “hoge,fuga” definieren.

Wenn Sie | usw. anstelle von Kommas verwenden möchten, können Sie auch das Trennzeichen definieren.

Finding Tagged Objects

Methoden, die für die Implementierung von Suchfunktionen usw. nützlich sein könnten.

Die offizielle Referenz sagt scope :by_join_date, order(“created_at DESC”), aber dies ist Notation für eine alte Version von ActiveRecord und funktioniert nicht. Richtig geschrieben wird es zu scope :by_join_date , -> {order(created_at: :DESC)}. Bitte beziehen Sie sich darauf.

# Gibt Objekte aus User-Modell zurück, die Tag "awesome" enthalten
User.tagged_with("awesome").by_join_date

# e.g. Hashmodel.tagged_with("fuga")[0].id
# => 1
# Hashmodel.tagged_with("fuga,hoge")[0].id
# Durch Kommas getrennte Zeichenfolgen sind OK, nicht nur Arrays

# Gibt Objekte zurück, die alle Tags enthalten (UND-Suche)
User.tagged_with(["awesome", "cool"], :match_all => true)

# Wenn mindestens eine übereinstimmt (ODER-Suche)
User.tagged_with(["awesome", "cool"], :any => true)

# Ausschluss; enthält keine Tags
User.tagged_with(["awesome", "cool"], :exclude => true)

Tag-Liste und einzelne Tag-Seiten implementieren

Controller generieren und konfigurieren

rails g controller tags index show
class TagsController < ApplicationController
  def index
    @tags = ActsAsTaggableOn::Tag.all
  end

  def show
    @tag =  ActsAsTaggableOn::Tag.find(params[:id])
    @posts = Hashmodel.tagged_with(@tag.name)
  end
end

Wie Sie sehen können, ist ActsAsTaggableOn::Tag das Modell.

  • VIEW-Beispiel
app\views\tags\index.html.erb ```erb # Tags List <% @tags.each do |tag| %> <% end %>
Tag Name Tag count
<%= tag.name %> <%= tag.taggings_count %>
app\views\tags\show.html.erb
```erb
<h1>Tag::<%= @tag.name %></h1>
<ul>
<% @posts.each do |post| %>
  <li><%= post.title %></li>
<% end %>
</ul>

Image

Referenzen:

mbleigh/acts-as-taggable-on: A tagging plugin for Rails applications that allows for custom tagging along dynamic contexts. Tutorial for Posts · mbleigh/acts-as-taggable-on Wiki

Diese beiden sollten ausreichen.

Die Implementierung der Suchfunktion kommt später.

Diesen Artikel teilen

Shou Arisaka 18. Okt. 2025

🔗 Links kopieren