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.
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
| 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>

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.