Hi! Давайте створимо рядок пошуку.
У цьому епізоді ми будемо працювати з **Ransack**.
Ось як він працює добре:
Натискаючи кнопку Пошук, ми можемо без зусиль шукати за заголовками та змістом. Його вигляд чудово інтегрується в естетику нашого блогу, покращуючи загальний досвід користувача.
Ransack Gem — це чудовий інструмент для швидкої реалізації функціональності пошуку та сортування в додатках.
Ransack спрощує процес реалізації функціональності пошуку в Rails-додатках, надаючи чистий і інтуїтивно зрозумілий інтерфейс для побудови пошукових запитів та обробки результатів пошуку. Це широко використовуваний інструмент у Rails-проектах для додавання потужних можливостей пошуку з мінімальними зусиллями.
Ласкаво просимо на борт!
У цьому пості (з посиланням на Deanin):
Ви дізнаєтесь:
Як використовувати Ransack версії 4.1;
Почнемо!
Примітка: якщо ви застрягли, перегляньте мій репозиторій.
Щоб інтегрувати Ransack у вашому Rails 7 вебсайті, дотримуйтесь таких загальних кроків:
0#крок — Завантажте останню версію (v8) поста тут і підготуйте середовище vscode
.
Давайте відкриємо нову гілку функцій: git checkout -b add_ransack
.
1#крок — Встановіть гем Ransack: Додайте гем Ransack до вашого Gemfile:
bundle add ransack -v 4.1
2#крок — Потім виконайте команду bundle install
, щоб встановити гем.
bundle install
3#крок — Перейдіть до моделі Post
та додайте наступний рядок:
app/models/post.rb
...
**def self.ransackable_attributes(**_auth_object = nil**)**
%w[title body created_at updated_at user_id]
end
**def self.ransackable_associations(**_auth_object = nil**)**
%w[posts users comments notifications action_text_rich_texts]
end
...
У Ransack 4 методи ransackable_attributes
та ransackable_associations
використовуються для вказівки, які атрибути та асоціації моделі можна шукати та фільтрувати за допомогою форми пошуку Ransack.
ransackable_attributes
: Цей метод визначає, які атрибути моделі можна шукати та фільтрувати через форму пошуку Ransack; у наведеному прикладі%w[title body created_at updated_at user_id]
вказує, що атрибутиtitle
,body
,created_at
,updated_at
таuser_id
доступні для пошуку; параметр_auth_object
не використовується в цьому прикладі. Зазвичай він використовується для цілей авторизації, щоб контролювати, які атрибути доступні на основі дозволів поточного користувача.ransackable_associations
: Цей метод вказує, які асоціації моделі можна шукати та фільтрувати за допомогою форми пошуку Ransack; у наданому прикладі%w[posts users comments notifications action_text_rich_texts]
вказує, що асоціаціїposts
,users
,comments
,notifications
таaction_text_rich_texts
доступні для пошуку; Подібно доransackable_attributes
, параметр_auth_object
не використовується в цьому прикладі.
Ці методи використовуються для налаштування поведінки форми пошуку Ransack, вказуючи, які атрибути та асоціації можна шукати. За замовчуванням Ransack намагається шукати всі атрибути та асоціації моделі, якщо ці методи не визначені для обмеження або налаштування пошукової поведінки.
4#крок — Перейдіть до терміналу та виконайте команду для контролера:
rails g controller search index
5#крок — Перейдіть до та додайте цей маршрут:
config/routes.rb
get 'search', to: 'search#index'
6#крок — Оновіть вигляд за допомогою форми пошуку: Додайте форму пошуку до ваших виглядів, де ви хочете включити функціональність пошуку. Наприклад, ви можете створити форму за допомогою хелпера search_form_for
.
Для початку давайте створимо частковий шаблон для рендерингу в файлі index.html.erb
, який буде розміщений над іншими елементами. Цей частковий шаблон буде інкапсулювати специфічні елементи чи секції нашої сторінки для кращої організації та підтримуваності:
app/views/search/_form.html.erb
<%= search_form_for @query, url: search_path, method: :get, html: { class: "d-flex", role: "search" } do |f| %> <%= f.search_field :title_or_body_cont, class: "form-control me-2" , placeholder: "Пошук..."%> <%= f.submit "Пошук", class: "btn btn-outline-secondary-light btn-sm" %> <% end %>
7#Крок — Обробка пошуку в Контролері: У вашому контролері використовуйте Ransack для виконання пошуку на основі параметрів, отриманих з форми:
app/controllers/search_controller.rb
class SearchController < ApplicationController
# # див. app/controllers/application_controller.rb
def index
@query = Post.ransack(params[:q])
@posts = @query.result(distinct: true)
end
end
8#Крок — Перейдіть до файлу:
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
...
before_action :set_query
def set_query
@query = Post.ransack(params[:query])
@posts = @query.result(distinct: true)
end
...
end
9#Крок — Відображення результатів пошуку: Врешті, відобразіть результати пошуку у вашому шаблоні відповідно до вимог вашого застосунку:
app/views/search/index.html.erb
<%= pluralize(@posts.count, "Результат") %>
<%# Дивіться app/views/layouts/_navbar.html.erb %>
<% @posts.each do |post| %>
<% end %>
<%= sort_link(@query, :title, "Заголовок", default_order: :asc) %>
<%= sort_link(@query, :body, "Контент блогу") %>
<%= sort_link(@query, :user.name, "Користувачі") %>
<%= link_to post.title, post %>
<%= post.body.truncate_words(5) %>
<%= link_to post.user.name, post.user %>
10#Крок — Перейдіть до файлу навігаційної панелі та додайте рендеринг форми пошуку в нього (див. крок 07):
app/views/layouts/_navbar.html.erb
....
**<%= render 'search/form' %>**
... вище цього лежать...
<%= render 'layouts/notifications' %>
...
11#Крок — Тестування та завантаження в ваш GitHub репозиторій: Тестуйте функціональність пошуку, щоб переконатися, що вона працює як очікується.
Виконання цих кроків допоможе вам інтегрувати Ransack у ваш сайт на Rails 7, що дозволить користувачам легко шукати ваш контент. Обов'язково зверніться до документації Ransack для більш складних налаштувань і параметрів за необхідності.
Це все, друзі!
До зустрічі в наступному епізоді [TODO: LINK TO THE NEXT POST]👋️👋️👋️!
👉️ railsblogv10
Це мої зусилля для слідування туторіалу Deanin з Ransack. YouTube плейлист Deanin: Intro Ruby on Rails 7 For Beginners Tutorial Series https://www.youtube.com/playlist?list=PL3mtAHTeRezB9fnoIcKS4vYFjm23vddb_
Git команди:
....
rails db:drop
rails db:migrate
rails s
git status
git remote -v
git pull
git add -A
git commit -m ":lipstick: Ransack 4.1: Реалізація та інтеграція"
git push --set-upstream origin add_ransack
remote: Створіть pull-запит для 'add_ransack' на GitHub, відвідавши:
remote: https://github.com/giljr/rails_blog_demo/pull/new/add_ransack
**[Перейдіть до вашого GIT РЕПО і об’єднайте запит]**
**[Повертаємось до vscode]**
git checkout master
git status
git fetch
git merge add_ransack
git pull
history > history.txt
Кредити та посилання
Додавання рядка пошуку до вашого блогу| Ruby On Rails Для Початківців Частина 6 від Deanin
Ransack Документація від ransack
Ransack Код від github.com
ransack_demo від herokuapp.com
Для v2 давайте позначимо все!
git tag -a rails_blog_v10 -m "Blog in Rails 7- v10: Перейдіть за посиланням https://medium.com/jungletronics/a-rails-blog-in-vs-code-quick-start-5c3173191a64" -m "0- Навчіться використовувати Ransack версії 4.1;" -m "1- Генерація конфігурації Ransack;" -m "2- Модифікація моделі Post;" -m "3- Створення методів 'ransackable_attributes' і 'ransackable_associations';" -m "4- Створення маршруту, форм для пошуку в навігаційній панелі та переглядів для відображення" -m "5- Створення контролера пошуку та модифікація контролера додатка;" -m "Дякуємо за завантаження цього проєкту 😍️"
git push origin rails_blog_v10
Пошукові матчери
[
Пошукові матчери | Документація Ransack
Пошукові матчери
| Документація Ransack Пошукові матчери activerecord-hackery.github.io
](https://activerecord-hackery.github.io/ransack/getting-started/search-matches/?source=post_page-----a69a98a06ed0---------------------------------------)
Схожі пости:
00# Епізод — RailsSeries — Інсталяція Ruby on Rails за допомогою ASDF— Чому ASDF кращий за RBENV для Rails Bootstrap App?
01# Епізод — RailsSeries — Як відправляти електронні листи в Rails 7? — Реєстрація користувачів та введення в систему.
02# Епізод — RailsSeries — 14 Ruby розширення 4 Vs Code — На основі цього відео Deanin.
03# Епізод — RailsSeries — Rails блог у VS Code — Швидкий старт— Як створити блог у VS Code — Частина I
04# Епізод — RailsSeries — Rails блог у VS Code — Стилізація — Як створити блог у VS Code — Частина II
05# Епізод — RailsSeries — Rails блог у VS Code — Створення постів — Як створити блог у VS Code — Частина III
06# Епізод — RailsSeries — Rails блог у VS Code — Поради та трюки з постами — Як створити блог у VS Code — Частина IV
07# Епізод — RailsSeries — Rails блог у VS Code — Devise — Як створити блог у VS Code — Частина V
08# Епізод — RailsSeries — Rails блог у VS Code — Додавання коментарів до поста — Як створити блог у VS Code — Частина VI
09# Епізод — RailsSeries — Rails блог у VS Code — Використання Stimulus— Як створити блог у VS Code — Частина VII
10# Епізод — RailsSeries — Rails блог у VS Code — Noticed V1— Сповіщення для вашого додатку Ruby on Rails — Частина VIII
11# Епізод — RailsSeries — Rails блог у VS Code — Noticed V2— Сповіщення для вашого додатку Ruby on Rails — Частина IX
12# Епізод — RailsSeries — Rails блог у VS Code —Ransack 4— Додавання пошуку до вашого Rails додатку — Частина X (ця)
Перекладено з: Rails Blog In VS Code - Ransack v 4