Ich habe ein Suchformular in der App implementiert, die ich als PF mache. Wenn Sie jedoch mit [Rails-Suchformular] suchen, finden Sie viele Teilübereinstimmungen und genaue Übereinstimmungen. Ich fragte mich, ob ich irgendwie mit Hiragana oder Katakana nach dem Kanji-Teil suchen könnte.
Wenn Sie den Titel eines Videos speichern, konvertieren Sie den Titel in Romaji und speichern ihn in einer bestimmten Spalte. Wenn Sie suchen, konvertieren Sie auch das Suchwort in Romaji und bezeichnen es als dedizierte Spalte. Zuerst dachte ich darüber nach, alle Titel bei der Suche zu konvertieren, aber ich dachte, es würde einige Zeit dauern, wenn die Anzahl der Videos zunimmt, also entschied ich mich für die obige Methode.
Da ich ein Anfänger bin, denke ich, dass es einen Teil gibt, den ich nicht so überflüssig machen muss, aber ich werde ihn mit der Bedeutung eines Memorandums schreiben, also geben Sie ihm bitte eine große Sache.
Das Suchformular selbst enthält verschiedene Artikel, daher denke ich, dass es einfach zu erstellen ist. In meinem Fall handelt es sich um eine Video-Posting-Site. Erstellen Sie bei der Suche ein Suchformular, bei dem das Suchwort mit dem Titel des Videos übereinstimmt.
/application.html.erb
<div id="search-box">
<%= form_tag(search_path, :method => 'get') do %>
<div class="input-tag">
<%= text_field_tag :search, '', placeholder: 'Suche', value: params[:title] %>
</div>
<div class="submit tag">
<%= button_tag type: 'submit', class: 'btn btn-default' do %>
<i class="fas fa-search"></i>
<% end %>
</div>
<% end %>
</div>
Überspringen Sie das Routing zur Suchaktion des Video-Controllers.
routes.rb
#Suchfunktion
get "search" => "videos#search"
Edelstein einführen. Dieses Mal habe ich einen Edelstein namens Miyabi verwendet. Es ist ein Juwel, das von Hiragana über Katakana bis Romaji umgewandelt und beurteilt werden kann. Die diesmal verwendete Methode
.to_roman #String in Roman konvertieren
.to_kanhira #Konvertieren Sie Zeichenketten mit Kanji in Hiragana
.is_hira? #Beurteilung, ob die Zeichenkette Hiragana ist
.is_kana? #Bestimmen Sie, ob die Zeichenfolge Katakana ist
Nach der Einführung von gem schreiben wir create und search of the controller. Für das Modell namens Video user_id title introduction Es gibt eine Spalte namens convert_title, in der der in römische Zeichen konvertierte Titel gespeichert wird.
schema.rb
create_table "videos", force: :cascade do |t|
t.integer "user_id"
t.string "title"
t.text "introduction"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "conversion_title"
end
Ich erstelle einen videos.controller erstellen, aber ich habe Probleme.
Mit gem'miyabi 'können Sie [eine Zeichenfolge konvertieren, die Kanji enthält], aber Sie können nicht bestimmen [ob das Kanji in der Zeichenfolge enthalten ist].
Legt fest, ob der reguläre Ausdruck von Ruby Kanji enthält. Dieses Mal möchte ich überprüfen, ob das Kanji im Titel enthalten ist. Lassen Sie uns also nur das Kanji genau bestimmen.
@video.title.match(/[einer-龠]/)
Jetzt können Sie feststellen, ob das Kanji enthalten ist.
Speichern Sie das von create gepostete Video.
/videos_controller.rb
def create
@video = Video.new(video_params)
@video.user_id = current_user.id
if @video.title.match(/[einer-龠]/)
@video.conversion_title = @video.title.to_kanhira.to_roman
elsif @video.title.is_hira? || @video.title.is_kana?
@video.conversion_title = @video.title.to_roman
else
@video.conversion_title = @video.title
end
if @video.save
redirect_to video_path(@video)
else
render :new
end
end
private
def video_params
params.require(:video).permit(:title, :introduction, :video)
end
Stellen Sie zunächst von oben nach unten fest, ob der Titel Kanji enthält. Wenn es enthalten ist, konvertieren Sie den Titel in Hiragana und konvertieren Sie ihn dann in Romaji und speichern Sie ihn.
Wenn Kanji nicht enthalten ist und alle Hiragana und Katakana sind, werden sie zu Romaji konvertiert und gespeichert.
Wenn beides nicht zutrifft, nehmen wir an, dass es in römischen Buchstaben geschrieben ist, und speichern es so wie es ist.
Ich werde die Suchaktion auf die gleiche Weise schreiben.
/videos_controller.rb
def search
word = params[:search]
unless word.blank?
if word.match(/[einer-龠]/)
conversion_word = word.to_kanhira.to_roman
elsif word.is_hira? || word.is_kana?
conversion_word = word.to_roman
else
conversion_word = word
end
end
@search_video = Video.search(conversion_word)
end
Das in dem Formular gesuchte Wort wird dem Wort zugewiesen. Wenn ein Wort enthalten ist, wird es in römische Zeichen umgewandelt. Ähnlich wie beim Erstellen wird die Konvertierung, die die Bedingungen erfüllt, in der Reihenfolge von oben ausgeführt. Wenn das Suchwort ohne irgendetwas gesucht wird, werden alle Videos zurückgegeben.
Die Ansicht der Suchergebnisse sieht folgendermaßen aus.
/videos/search.html.erb
<h2>Suchergebnisse</h2>
<% unless @search_video.blank? %>
<div class="row">
<% @search_video.each do |video| %>
=====Kürzung=====
<% end %>
</div>
<% else %>
<p>Keine Ergebnisse</p>
<% end %>
</div>
Wenn das gesuchte Wort nicht übereinstimmt, wird diese Tatsache angezeigt. Das ist alles dazu.
Ich werde es tatsächlich versuchen.
Geben Sie "Umigame" in Hiragana ein
Er gab ein Video mit einem Conversion-Titel namens "umigame" zurück. (Es gibt viele Videos mit dem Titel Kaigame, aber dies ist das Video vor dem Hinzufügen von convert_title. Vielen Dank.)
Ich werde auch in Romaji suchen.
Es wurde angezeigt.
Während des Testens kann sich die Bewegung der Parameter ändern, wenn der Browser zurück usw. eingegeben wird, oder alle Videos können gelesen werden. Vielleicht ist es Bargeld ... Ich denke, ich muss auch JS lernen.
In Bezug auf Kanji scheint es, obwohl es auch im Titel enthalten ist, nicht 100% perfekt zu konvertieren. (Tatsächlich wurde das Wort "am stärksten" in "saikiu" umgewandelt.) Ich denke, es kann verwendet werden, wenn Sie eine kleine Suche machen möchten.
Wenn es einen besseren Weg gibt, tun Sie es bitte.
Recommended Posts