[Rails] 검색 형식에서 가명, 영화 가명, 한자를 구분하지 않고 검색한다(정밀도는 100%가 아니다)
다만, [rails 검색 형식]으로 검색하면 많은 부분이 일치하고 완전히 일치할 수 있다.
어떻게 해서든 히라가나 가명으로 한자 부분을 검색할 수 있을까요?
프로세스로서 애니메이션 제목을 저장할 때 제목을 로마자로 변환하여 전용 열에 저장하고, 검색할 때도 검색 문자를 로마자로 변환하여 전용 열을 참조한다.
처음에 검색할 때 제목을 모두 바꾸려고 했지만 애니메이션이 늘어나면 시간이 걸릴 것 같아서 상술한 방법을 사용했다.
제가 첫 학자이기 때문에 이런 지루한 일을 하지 않아도 괜찮다고 생각되는 부분도 있지만, 기록을 잊는다는 의미도 담겨 있으니 널리 양해해 주시기 바랍니다.
사이트 축소판 그림
검색 테이블 작성
검색 형식 자체에 다양한 보도가 있기 때문에 간단하게 할 수 있다고 생각합니다.
자신의 상황은 동영상 투고 사이트다.읽어들이기에서 애니메이션 제목과 일치하는 읽어들이기 문자를 만듭니다.
/application.html.erb
<div id="search-box">
<%= form_tag(search_path, :method => 'get') do %>
<div class="input-tag">
<%= text_field_tag :search, '', placeholder: '検索', 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>
비디오 컨트롤러의 검색 동작으로 경로를 건너뜁니다.routes.rb
# 検索機能
get "search" => "videos#search"
컨트롤러에 추기
gem 가져오기
이번에는 미야비라는 젬을 사용했다.평가명~편가명~로마자로 변환하거나 판정할 수 있는gem.
이번에 사용한 방법.
.to_roman #文字列をローマ字に変換
.to_kanhira #漢字が含まれた文字列をひらがなに変換
.is_hira? #文字列がひらがなか判定
.is_kana? #文字列がカタカナか判定
gem를 가져오면 컨트롤러의create와search를 씁니다.Video라는 모델입니다.
user_id title introduction
의 열, 제목을 로마자로 변환하는 아이템 저장타이틀이라는 열이 추가되었습니다.
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
videos.controller의create를 만드는 데 문제가 발생했습니다.gem'miyabi'에서는'한자를 포함하는 문자열을 변환할 수 있지만'한자가 문자열에 포함되어 있는지 여부를 판정할 수 없습니다'.
루비가 가지고 있는 정규 표현식에 한자가 포함되어 있는지 판단합니다.
이번에는 제목에 한자가 들어 있는지 알아보려고 쉼표로만 한자를 판정한다.
@video.title.match(/[一-龠々]/)
이렇게 하면 한자 포함 여부를 판정할 수 있다.create에서 업로드한 비디오를 저장합니다.
/videos_controller.rb
def create
@video = Video.new(video_params)
@video.user_id = current_user.id
if @video.title.match(/[一-龠々]/)
@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
위에서부터 순서대로 제목에 한자가 포함되어 있는지 먼저 판정한다.포함되어 있으면 제목을 가명으로 변환한 다음 로마자로 변환하여 저장합니다.
한자를 포함하지 않고 모두 평가명이며, 편가명은 로마자로 변환하여 보존한다.
어느 것도 적용되지 않으면 로마자로 투고한 것으로 판단해 그대로 보관한다.
검색 액션 영화도 같은 내용을 쓴다.
/videos_controller.rb
def search
word = params[:search]
unless word.blank?
if word.match(/[一-龠々]/)
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
형식 검색의 단어를 워드에 대입하고 워드가 있으면 로마자로 변환한다.create와 마찬가지로 위에서부터 조건에 맞는 전환을 순서대로 진행합니다.
검색한 단어가 아무것도 검색되지 않으면 영상은 모두 답장한다.
검색 결과의view는 이런 느낌입니다.
/videos/search.html.erb
<h2>検索結果</h2>
<% unless @search_video.blank? %>
<div class="row">
<% @search_video.each do |video| %>
===== 省略 =====
<% end %>
</div>
<% else %>
<p>検索結果はありません</p>
<% end %>
</div>
검색한 단어가 일치하는 내용이 없으면 이 뜻을 표시합니다.이렇게 되면 대체로 다 되었다.
완성!
내가 실제로 해 볼게.

'가명으로'바다거북이'를 입력하다

"umigame"이라는 conversion타이틀이 달린 영상도 줬어요.
(바다거북 타이틀 영상이 많지만, 컨버션 타이틀을 추가하기 전 영상이니 잘 부탁드립니다.)
로마자를 검색해 보다.


이(가) 표시됩니다.
기타
테스트를 진행하면서 브라우저 패키지에 들어가는 등 매개 변수의 동작이 바뀌거나 모든 애니메이션이 읽힌다.
아마 현금 같은 거겠죠...JS도 공부해야지...내 생각엔
한자에 관해서는 제목에도 있지만 100% 완벽한 변환은 아니다.
(실제로'최강'이라는 글자는'saikiu'로 바뀌었다)
검색을 좀 하려고 할 때 이용할 수 있을 것 같아서요.
더 좋은 방법이 있다면 꼭 오세요.
Reference
이 문제에 관하여([Rails] 검색 형식에서 가명, 영화 가명, 한자를 구분하지 않고 검색한다(정밀도는 100%가 아니다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HashibamiAkira/items/06ca8a0d6b420954d375텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)