[RUBY] [Rails] Suche ohne Unterschied zwischen Hiragana, Katakana und Kanji mithilfe des Suchformulars (Genauigkeit ist nicht 100%)

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.

Referenzierte Site

Erstellen Sie ein Suchformular

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"

Zum Controller hinzufügen

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.

Komplett!

Ich werde es tatsächlich versuchen.

スクリーンショット 2020-09-28 13.30.22.png

Geben Sie "Umigame" in Hiragana ein

スクリーンショット 2020-09-28 13.31.12.png

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.

スクリーンショット 2020-09-28 14.38.18.png

スクリーンショット 2020-09-28 14.38.33.png

Es wurde angezeigt.

Andere

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

[Rails] Suche ohne Unterschied zwischen Hiragana, Katakana und Kanji mithilfe des Suchformulars (Genauigkeit ist nicht 100%)
[Rails] Was ist der Unterschied zwischen Redirect und Rendering?
[Rails] Was ist der Unterschied zwischen Bundle-Installation und Bundle-Update?
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
[Rails / Active Record] Über den Unterschied zwischen create und create!
Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??