J'ai implémenté un formulaire de recherche dans l'application que je crée en tant que PF. Cependant, si vous recherchez avec [formulaire de recherche de rails], vous trouverez de nombreuses correspondances partielles et exactes. Je me suis demandé si je pouvais d'une manière ou d'une autre rechercher la partie kanji avec hiragana ou katakana.
Le flux est que lorsque vous enregistrez le titre d'une vidéo, vous convertissez le titre en Romaji et l'enregistrez dans une colonne dédiée, et lorsque vous recherchez, vous convertissez également le mot de recherche en Romaji et vous y faites référence en tant que colonne dédiée. Au début, j'ai pensé à convertir tous les titres lors de la recherche, mais j'ai pensé que cela prendrait du temps à mesure que le nombre de vidéos augmentait, j'ai donc choisi la méthode ci-dessus.
Puisque je suis un débutant, je pense qu'il y a une partie dont je n'ai pas besoin pour faire une chose aussi redondante, mais je vais l'écrire avec le sens d'un mémorandum, alors donnez-lui un gros problème.
Le formulaire de recherche lui-même contient divers articles, donc je pense qu'il est facile à créer. Dans mon cas, il s'agit d'un site de publication de vidéos. Dans la recherche, créez un formulaire de recherche dans lequel le mot recherché correspond au titre de la vidéo.
/application.html.erb
<div id="search-box">
<%= form_tag(search_path, :method => 'get') do %>
<div class="input-tag">
<%= text_field_tag :search, '', placeholder: 'Chercher', 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>
Ignorez le routage vers l'action de recherche du contrôleur de vidéos.
routes.rb
#Fonction de recherche
get "search" => "videos#search"
Présentez le bijou. Cette fois, j'ai utilisé une gemme appelée miyabi. C'est un joyau qui peut être converti et jugé de Hiragana à Katakana à Romaji. La méthode utilisée cette fois
.to_roman #Convertir une chaîne en romain
.to_kanhira #Convertir les chaînes de caractères contenant des kanji en hiragana
.is_hira? #Juger si la chaîne de caractères est hiragana
.is_kana? #Déterminez si la chaîne de caractères est katakana
Après avoir introduit gem, nous écrirons créer et rechercher le contrôleur. Pour le modèle appelé Vidéo user_id title introduction Il existe une colonne appelée conversion_title qui enregistre le titre converti en caractères romains.
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
Je crée une création de videos.controller, mais j'ai des problèmes.
Avec gem'miyabi ', vous pouvez [convertir une chaîne de caractères contenant des kanji], mais vous ne pouvez pas déterminer [si le kanji est inclus dans la chaîne de caractères].
Détermine si l'expression régulière de ruby contient des kanji. Cette fois, je veux vérifier si le kanji est inclus dans le titre, alors identifions uniquement les kanji.
@video.title.match(/[un-龠]/)
Vous pouvez maintenant déterminer si le kanji est inclus.
Enregistrez la vidéo publiée par create.
/videos_controller.rb
def create
@video = Video.new(video_params)
@video.user_id = current_user.id
if @video.title.match(/[un-龠]/)
@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
De haut en bas, déterminez d'abord si le titre contient des kanji. S'il est inclus, convertissez le titre en Hiragana, puis convertissez-le en Romaji et enregistrez-le.
Si Kanji n'est pas inclus et que tous sont Hiragana et Katakana, ils seront convertis en Romaji et sauvegardés.
Si ni l'un ni l'autre n'est vrai, nous supposerons qu'il est affiché en caractères romains et l'enregistrerons tel quel.
J'écrirai l'action de recherche de la même manière.
/videos_controller.rb
def search
word = params[:search]
unless word.blank?
if word.match(/[un-龠]/)
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
Le mot recherché dans le formulaire est attribué à mot, et si le mot est inclus, il est converti en caractères romains. Similaire à créer, la conversion qui remplit les conditions est effectuée dans l'ordre à partir du haut. Si le mot recherché est recherché sans rien, toutes les vidéos sont renvoyées.
La vue des résultats de la recherche ressemble à ceci.
/videos/search.html.erb
<h2>Résultats de recherche</h2>
<% unless @search_video.blank? %>
<div class="row">
<% @search_video.each do |video| %>
=====réduction=====
<% end %>
</div>
<% else %>
<p>Aucun résultat</p>
<% end %>
</div>
S'il n'y a pas de correspondance pour le mot recherché, ce fait est affiché. C'est tout ce qu'on peut en dire.
Je vais vraiment l'essayer.
Entrez "Umigame" dans Hiragana
Il a renvoyé une vidéo avec un titre de conversion appelé "umigame". (Il existe de nombreuses vidéos qui portent le titre de Kaigame, mais il s'agit de la vidéo avant l'ajout de conversion_title. Merci.)
Je chercherai également à Romaji.
Il a été affiché.
Pendant le test, si le navigateur en arrière, etc. est entré, le mouvement des paramètres peut changer, ou toutes les vidéos peuvent être lues. Peut-être que c'est de l'argent ... Je pense que je dois aussi étudier JS.
Concernant les kanji, bien que ce soit également dans le titre, il ne semble pas se convertir à 100% parfaitement. (En fait, le mot "le plus fort" a été converti en "saikiu") Je pense qu'il peut être utilisé lorsque vous souhaitez faire une petite recherche.
S'il y a un meilleur moyen, faites-le.
Recommended Posts