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.
Ruby 2.5.7 Rails 5.2.4.2 Verwenden Sie Design Bootstrap
① 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.
new.html.erb
index.html.erb
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.
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