파일 태그 검색 실현
개시하다
자신의 포털사이트에서 태그 검색을 실시했기 때문에 미리 복습해 두세요.
http://nishikanako.work
메서드
다음 원본 파일과 같이 덮어쓴 URL의 제목과 설명문에서 선택한 키가 있으면 추출해서 데이터에 저장합니다.
scrape.rb
tag_keyword = ["あおい", "さくら", "きいろいゾウ", "通天閣", "しずく", "こうふく みどりの", "こうふく あかの", "窓の魚", "映画", "i", "イベント", "うつくしい人", "きりこについて", "炎上する君", "白いしるし", "円卓", "漁港の肉子ちゃん", "地下の鳩", "ふくわらい", "インタビュー", "サイン会", "ふる", "舞台", "サラバ", "まく子", "おまじない", "イベント", "劇場", "上映", "まにまに" ,"ご飯ぐるり", "作家", "小説家", "Youtube", "対談"]
tag_keyword.each do |keyword|
if (title+description).index(keyword) != nil then
scrape_tag = ScrapeTag.create(
:tag => keyword,
:scrape_id => scrape.id
)
p '[Tag] ' + keyword
end
end
index 방법은 수조에서 변수obj와 같은 요소를 찾아서 그 위치를 정수로 되돌려줍니다. (첫 번째는 0, 두 번째는 1,...)요소를 찾을 수 없으면 nil로 돌아갑니다.https://ref.xaio.jp/ruby/classes/array/index
이런 거.
위의 출처를 문장으로 정리하면 키워드의 존재성을 하나하나 검증할 수 있다.여기에 제목과 개요문에 키워드가 있으면 (nil이 아니라면 해당 URL과 연결(scrape.id)을 만들어 데이터로 저장합니다.두 테이블의 링크는
belongs_to
와 has_many
를 이용했다.문장 요약 아래에 이것을 표시합니다.
views/home.html.rb
<% scrape.scrape_tags.each do |tag| %>
#bootstrap
<span class="badge badge-lg badge-primary ">
<a href="/?keyword=<%= tag.tag %>" style="color:white"><%= tag.tag %></a>
</span>
<% end %>
아래 파란색 상자의 단어가 탭으로 표시됩니다.a 라벨을 링크로 하기 때문에 라벨을 누르면 이 라벨이 있는 글만 표시됩니다.
위에서 말한 바와 같이 controller에서 글의 집합의 실례 변수@scrapes를 조건으로 나누어 정의해야 한다.
sample_controller.rb
def home
if params[:keyword].present?
@scrapes = Scrape.where("title LIKE ? or description LIKE ?","%"+params[:keyword]+"%","%"+params[:keyword]+"%").paginate(page: params[:page],:per_page => 21).includes(:scrape_tags)
else
@scrapes = Scrape.paginate(page: params[:page],:per_page => 21).includes(:scrape_tags)
end
end
params를 통해 키워드의 존재성을 확인하고 없는 경우 모든 글을 얻고, 어떤 경우 제목이나 요약에 키워드가 포함된 글만 얻습니다.끝맺다
이번에는 mecab을 이용하고 싶어요. 예를 들면 명사만 빼고 싶은데 쓸모 있는 단어가 없어서 index 방법을 이용했어요.
해설이 부족한 부분이 있으면 메시지를 남겨주세요.(\")
Reference
이 문제에 관하여(파일 태그 검색 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jonnyjonnyj1397/items/c582891d3241a52889d2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)