[RUBY] Tag-Funktion zu Rails hinzufügen. Verwenden Sie Acts-as-Taggable-On

Überblick

Ich habe gem Acts-as-taggable-on in Rails verwendet, um Tag-Funktionen hinzuzufügen. Die Funktion, die ich hinzugefügt habe, ist eine Tag-Funktion, mit der Sie vorhandene Tags (in der Seed-Datei) aus neuen Posts vorbereiten und mehrere davon auswählen können. Das Bild unten. スクリーンショット 2020-07-16 22.58.40.png

Umgebung

Ruby 2.5.7 Rails 5.2.4.2 Verwenden Sie Design Bootstrap

Implementierung

① Installation

Gemfile.


gem 'acts-as-taggable-on', '~> 6.0'

Terminal.


$ bundle install

② Erstellen Sie eine Tabelle

Terminal.


$ rails acts_as_taggable_on_engine:install:migrations

$ rails db:migrate

③ Zum Modell und Controller hinzugefügt

app/models/style.rb


class Style < ApplicationRecord
    acts_as_taggable  #hinzufügen
end

Im Index werden die Tag-Liste und die Tags angezeigt, die beim Drücken des Tags markiert werden.

app/controllers/styles_controller.rb


def index
    @tags = ActsAsTaggableOn::Tag.all
    #Liste der Tags
    if params[:tag]
      @styles = Style.tagged_with(params[:tag])
      #Bei der Suche nach einem Tag wird das Tag angezeigt, bei dem das Tag entfernt wurde.
    else
      @styles = Style.all
    end

def new
    @style = Style.new
    @tags = ActsAsTaggableOn::Tag.all
end

def show
    @style = Style.find(params[:id])
end

def create
    @style = Style.new(style_params)
    @style.user_id = current_user.id
    if @style.save
      flash[:notice] = "Ich habe den Stil registriert"
      redirect_to style_path(@style.id)
    else
      @tags = ActsAsTaggableOn::Tag.all
      render :new
   end
end
#Da Update und Destroy dieselbe Form haben, werden sie weggelassen.

private

def style_params
      params.require(:style).permit(:name, :user_id, :image, tag_list: [])
      #  tag_list: []Hinzugefügt
end

end

④ Zur Seed-Datei hinzufügen Dieses Mal bereiten wir ein vorhandenes Tag vor. Verwenden Sie daher die Seed-Datei.

db/seeds.rb


#Verschlagwortet mit Binden(%w()Beschrieben in)
array = %w(Netter natürlicher eleganter Modus Frauenbrei Männerbrei Kurzer Bob Innenaufzug Bob Kurze Schicht Lange Schicht Schicht Frauenmähen Männer Mähen Männerschnitt Männer Zwei Block Frauen Zwei Block Mohican Männer Business Mädchen Jungen Studenten Mrs. Balayages Mesh Farbverlauf Farbe Promi Geflochtene Hochzeit Zeremonie Party Lässiges Make-up Nettes Make-up-Modus Make-up Natürliches Make-up Elegantes Make-up Zeremonie für Erwachsene Männer Wolf Frauen Wolf Gradient Bob Äußerer Honig Bob Front Down Sportliches graues Haar Innere Farbe Ohrring Farbe Männer Dauerwelle Frauen Perma Herren Mesh Herren Farbe)
array.each{ |tag|
  tag_list = ActsAsTaggableOn::Tag.new
  tag_list.name = tag
  tag_list.save
}

Terminal.


$ rails db:seed

⑤ Beschreiben Sie im Blick


<div class="col-xs-12">
   <% @tags.each do |tag| %>
      <%= link_to "#{tag.name}(#{tag.taggings_count})", tag_path(tag.name), class: "label label-default" %>
   <% end %>
</div>
<%= form_for @style do |f| %>
  <div class="col-xs-12">
・ ・ ・ ・ ・ ・ ・
    <label class="col-sm-12">Etikett</label>
      <div class="col-sm-12">
        <% @tags.each do |tag| %>
          <%= f.check_box :tag_list, { multiple: true }, "#{tag.name}", nil %>
          <%= f.label " #{tag.name}(#{tag.taggings_count})", class: "label label-default" %>
        <% end %>
      </div>

      <div class="col-sm-12 text-right">
        <%= f.submit "Erstelle neu", class: "btn btn-danger" %>
      </div>
   </div>
  </div>
<% end %>
<label class="col-sm-12 my-top">
   <%= raw(@style.tag_list.map { |t| link_to t, tag_path(t), class: "label label-default" }.join(' ')) %>
</label>

Das Obige sieht wie folgt aus.

Der Index tagged_with (params [: tag]) schränkt die Tags ein. Klicken Sie auf das Tag, um die mit dem Tag verknüpften Daten anzuzeigen. In # {tag.name} wird der Tag-Name angezeigt. # {tag.taggings_count} zeigt die Anzahl der registrierten Tags an. Damit ist die Implementierung abgeschlossen.

Ergänzung

Bei der Bereitstellung in der Produktion ist ein Fehler mit "Acts-as-Taggable-On" aufgetreten. Wenn Sie eine Fehlermeldung erhalten, beziehen Sie sich bitte darauf. Ich muss die Tag-Tabelle ändern

db/migrate/・ ・ ・_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb


t.references :tag, foreign_key: { to_table: ActsAsTaggableOn.tags_table }

Trotz Einstellen des obigen externen Schlüssels

db/migrate/・ ・ ・ ・_add_missing_unique_indices.acts_as_taggable_on_engine.rb


remove_index ActsAsTaggableOn.taggings_table, :tag_id if index_exists?(ActsAsTaggableOn.taggings_table, :tag_id)

Es scheint, dass Sie versuchen, den Index zu löschen, ohne den externen Schlüssel zu löschen.

So hat es funktioniert, als ich es wie folgt gemacht habe.

db/migrate/・ ・ ・ ・_add_missing_unique_indices.acts_as_taggable_on_engine.rb


# This migration comes from acts_as_taggable_on_engine (originally 2)
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
  class AddMissingUniqueIndices < ActiveRecord::Migration[4.2]; end
else
  class AddMissingUniqueIndices < ActiveRecord::Migration; end
end
AddMissingUniqueIndices.class_eval do
  def self.up
    add_index ActsAsTaggableOn.tags_table, :name, unique: true

    # remove_index ActsAsTaggableOn.taggings_table, :tag_id if index_exists?(ActsAsTaggableOn.taggings_table, :tag_id)
    #Kommentieren Sie das Obige aus
    if index_exists?(ActsAsTaggableOn.taggings_table, :tag_id) #hinzufügen
      remove_foreign_key :taggings, :tags                      #hinzufügen
      remove_index ActsAsTaggableOn.taggings_table, :tag_id    #hinzufügen
    end
    remove_index ActsAsTaggableOn.taggings_table, name: 'taggings_taggable_context_idx'
    add_index ActsAsTaggableOn.taggings_table,
              [:tag_id, :taggable_id, :taggable_type, :context, :tagger_id, :tagger_type],
              unique: true, name: 'taggings_idx'
  end

  def self.down
    remove_index ActsAsTaggableOn.tags_table, :name

    remove_index ActsAsTaggableOn.taggings_table, name: 'taggings_idx'

    add_index ActsAsTaggableOn.taggings_table, :tag_id unless index_exists?(ActsAsTaggableOn.taggings_table, :tag_id)
    add_index ActsAsTaggableOn.taggings_table, [:taggable_id, :taggable_type, :context], name: 'taggings_taggable_context_idx'
  end
end

Hier habe ich mich auf Folgendes bezogen. https://teratail.com/questions/224720

In der Entwicklungsumgebung habe ich einen Fehler mit gem erhalten, bei dem es kein Problem gab, also war ich ungeduldig ... Ich bin froh, wenn Sie es als Referenz verwenden können.

Recommended Posts

Tag-Funktion zu Rails hinzufügen. Verwenden Sie Acts-as-Taggable-On
Fügen Sie eine Suchfunktion in Rails hinzu.
[Rails] Tag-Verwaltungsfunktion (unter Verwendung von Acts-as-Taggable-On)
Mit Rails in eine Tag-zu-URL-Zeichenfolge konvertieren
[Rails] Tag-Ranking-Funktion
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
[Rails] Verwendung von Enum
[Rails] Verwendung von Enum
Verwendung von Rails Join
[Schienen] Spalte zum Entwickeln hinzufügen
[Rails] Verwendung der Validierung
[Rails] So verwenden Sie authenticate_user!
[Schienen] Verwendung von Scope
[Rails 6.0] Ich habe versucht, eine Tag-Suchfunktion zu implementieren (eine Funktion zum Eingrenzen nach Tags) [no gem]
[Rails] Wie man Edelstein "devise" benutzt
[Rails] Verwendung von Flash-Nachrichten
Vorbereiten der Erstellung einer Rails-Anwendung
Die Funktion ist sehr einfach zu bedienen
Verwendung von Ruby on Rails
[Schienen] So fügen Sie neue Seiten hinzu
Erstellen Sie eine Filterfunktion mit Acts-as-Taggable-On
[Rails] Verwendung von Active Storage
[Schienen] Fügen Sie starke Parameter hinzu, um sie zu entwickeln
So fügen Sie die Löschfunktion hinzu
[Einführung in Rails] Verwendung von Render
[Rails] Fügen Sie einen Bestätigungsbildschirm und einen Abschlussbildschirm hinzu, um die Registrierung der Mitgliedschaft zu erstellen.
[Rails] Implementierung der Tag-Funktion mit Acts-as-Taggable-On und der Funktion zur Vervollständigung der Tag-Eingabe mit Tag-It
(Ruby on Rails6) Erstellen Sie eine Funktion zum Bearbeiten des veröffentlichten Inhalts
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ein Memorandum zur Verwendung von Eclipse
Migrationsdatei zum Hinzufügen eines Kommentars zur Rails-Tabelle
[Rails] Verwendung von ActiveRecord :: Bitemporal (BiTemporalDataModel)
[Schienen] Verwendung der Kartenmethode
So fügen Sie einen neuen Hash / Array hinzu
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
[Schienen] Verwenden Sie die Validierung für einen bestimmten Controller
Verwendung von MySQL im Rails-Tutorial
Erstellen Sie trotzdem eine Anmeldefunktion mit Rails
[Rails] [Hinweis] Wann = zu <%%> hinzugefügt werden soll und wann nicht
[Ruby on Rails] Verwendung von redirect_to
[Rails] So erstellen Sie eine Teilvorlage
[Hinweis] Verwendung von Rails 6 Devise + Cancancan
[Verarbeitung × Java] Verwendung der Funktion
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
[Rails] Enum ist einfacher zu bedienen! Enumelize!
[Rails] Verwendung von video_tag zum Anzeigen von Videos
[Rails] Verwendung der Hilfsmethode, Confimartion
Verwendung von credentials.yml.enc aus Rails 5.2