- vừa được xem lúc

Fast Autocomplete Search Terms trong Rails (P2)

0 0 36

Người đăng: Thanh Hung

Theo Viblo Asia

Trong phần trước chúng ta đã cài đặt và làm một số bước để xây dựng 1 hệ thống tìm kiếm tự động trên nhiều model trong ứng dụng Rails. Sau đây là các bước tiếp theo để hoàn thiện hệ thống:

  1. LOADING SOULMATE INTO OUR RAILS APP

Soulmate có thể được load như ‘web-server’ riêng biệt, như nó đã là một app sinatra đầy đủ nhưng trong trường hợp của chúng tôi, chúng tôi muốn có nó trong rails. Điều này có thể làm đơn giản bằng cách thêm nó vào file routes.rb

routes.rb

Rails.application.routes.draw do mount Soulmate::Server, at: "/autocomplete" resources :verbs resources :nouns root "home#index"
end

Nơi mà chúng ta có thể truy vấn soulmate tại url /autocomplete. Hãy truy cập http://0.0.0.0:3000/autocomplete và xem nó có gì. Nó nên cho bạn status của soulmate.

anh1.png

Bây giờ hãy thử truy vấn một vài data. Chúng ta sẽ bắt đầu bởi truy vấn một vài nouns. Tôi sẽ thử truy vấn term là pro và xem tôi có gì. truy cập: http://0.0.0.0:3000/autocomplete/search?types[]=nouns&limit=6&term=pro

anh2.png

Đối với verb, tôi sẽ thử tìm kiếm verb bất kỳ bắt đầu với các ký tự co. Truy cập http://0.0.0.0:3000/autocomplete/search?types[]=verbs&limit=6&term=co

anh3.png

Trường hợp chỉ có NOUNS và VERBS. Để tìm kiếm cả 2 chúng ta tạo lời gọi giống url như sau: http://0.0.0.0:3000/autocomplete/search?types[]=verbs&types[]=nouns&limit=6&term=ha. Chú ý chúng ta phải để NOUNS và VERBS dưới dạng mảng. Kết quả sẽ bao gồm sự xuất hiện của "ha" trong cả nouns và verbs:

anh4.png

  1. PIECING IT ALL TOGETHER USING JQUERY AND SOULMATE.JS

Soulmate.js là một jQuery front-end cho gem auto-suggestion soulmate. Với soulmate.js chúng ta sẽ cung cấp ứng dụng với một auto-complete giống như tại seatgeek.com.

Hãy bắt đầu bằng cách lấy soulmate.js từ github. Sau khi tải về lấy jquery.soulmate.js nằm trong thư mục soulmate.js-master/src/compiled và thêm nó vào thư mục javascripts của app rails của mình.

//= require jquery
//= require jquery_ujs
//= require jquery.soulmate
//= require turbolinks
//= require_tree

Tiếp theo chúng ta lấy stylesheet demo.css trong soulmate.js-master/demo và thêm nó vào thư mục stylesheets trong thư mục vendor của ứng dụng rails. Trong file này chúng ta chỉ cần các dòng từ 30 đến 115. Chúng tôi cũng có thể cho phép đổi tên nó thành soulmate.css để giữ cho tên của ngữ nghĩa.

*= require_tree .
*= require soulmate
*= require_self
*/

soulmate.css

#soulmate { background-color: #fafafa; border: 1px solid #bbb; display: none; font: 12px/14px "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; list-style: none; margin: 0 0 0 10px; padding: 0; position: absolute; text-shadow: 0 0 0 white; /* play around with the top and left properties for correct positioning */ top: 201px; left: 460px; width: 579px; z-index: 1000; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); -khtml-box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); -ms-box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); -o-box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
} #soulmate .soulmate-type-container { border-top: 1px solid #ddd;
} #soulmate .soulmate-type-container:first-child { border-top: none;
} #soulmate .soulmate-type-suggestions { border-left: 1px solid #ddd; float: right; list-style: none; padding: 5px 0; width: 490px; letter-spacing: 0.5px;
} #soulmate .soulmate-suggestion { color: #111; cursor: pointer; font-weight: 500; font-size: 13px; padding: 5px 0 6px 12px; text-decoration: none;
} #soulmate .soulmate-suggestion.focus { color: white; margin-left: -1px; margin-right: -1px; padding-left: 13px; position: relative; text-shadow: 0 1px 1px #32629b; z-index: 1; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); -khtml-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); -ms-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); -o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); background: #545454; background: -moz-linear-gradient(top, #545454 0, #444444 100%); background: -webkit-gradient(linear, 0 0, 0 100%, from(#545454), to(#444444)); -ms-filter: "progid: DXImageTransform.Microsoft.gradient(startColorstr=#545454,endColorstr=#444444)"; filter: progid: DXImageTransform.Microsoft.gradient(startColorstr=#545454,endColorstr=#444444);
} #soulmate .soulmate-type { background-color: white; color: #333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 11px; letter-spacing: 0.5px; margin-right: 490px; padding: 10px 10px 0 10px; text-align: right; text-transform: capitalize; vertical-align: top; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; -khtml-border-radius: 5px; border-radius: 5px; zoom: 1;
} #soulmate .soulmate-type:before, #soulmate .soulmate-type:after { content: ""; display: table;
} #soulmate .soulmate-type:after { clear: both;
}
  1. ADDING A SEARCH FORM

Chúng ta sẽ đi tạo một controller home và cho nó làm đường dẫn root mặc định của app. Sau đó đặt form tìm kiếm trong view index của controller home.

$ rails g controller home index

Tạo đường dẫn root đến hành động index của controller home. Trong file routes.rb sẽ giống như sau:

root 'home#index'

Bây giờ hãy thêm một form tìm kiếm trong view index của controller home.

index.html.erb

<div class="container"> <h2>Search Nouns and Verbs</h2> <%= form_tag do %> <%= text_field_tag "search", nil, placeholder: "Search", autocomplete: :off %> <% end %>
</div>

Một số kiểu đơn giản, nhanh chóng

home.css.scss

// Place all the styles related to the home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.container { width: 500px; margin: 0 auto; padding: 100px; text-align: center;
} #search{ width: 400px; padding: 10px;
} li.soulmate-suggestion{ text-align: left;
}

File css ở trên chúng ta sẽ có form tìm kiếm như sau:

anh5.png

Đổi tên home.js.coffee trong app/javascripts thành home.js như chúng ta sẽ viết trong javascript thun. Trong file này sẽ gọi soulmate.js với các trường tìm kiếm trong form.

home.js

var ready = function(){ var render, select; render = function(term, data, type) { return term; } select = function(term, data, type){ // populate our search form with the autocomplete result $('#search').val(term); // hide our autocomplete results $('ul#soulmate').hide(); // then redirect to the result's link // remember we have the link in the 'data' metadata return window.location.href = data.link } $('#search').soulmate({ url: '/autocomplete/search', types: ['nouns','verbs'], renderCallback : render, selectCallback : select, minQueryLength : 2, maxResults : 5 }) }
// when our document is ready, call our ready function
$(document).ready(ready); // if using turbolinks, listen to the page:load event and fire our ready function
$(document).on('page:load', ready);

Và bây giờ chúng ta sẽ thử tìm kiếm với từ pa giao diện tìm kiếm sẽ như sau:

anh6.png

Trên đây là các bước xây dựng tìm kiếm tự động nhanh cho ứng dụng rails.

Cảm ơn các bạn đã theo dõi bài viết! 😃

Tham khảo: http://josephndungu.com/tutorials/fast-autocomplete-search-terms-rails

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 374

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414