TIL
# 211110 TIL ([Ruby, slim] form_for 사용하기, filter 정의 후 사용하기)
inthess
2021. 11. 11. 11:15
장기현장실습
PLSnote 이슈
#2813 노트에 고유번호를 부여하고, 통합검색 기능 추가 이슈 진행중
- 프린트에 나온 고유번호(activity.id)를 보고 맵 리스트 화면에서 검색할 수 있도록 하기
- 임의의 구현 상태에서 textarea가 아닌 form_for로 input창과 submit button이 나오도록 코드를 수정
= form_for @group_filter, method: :get, enforce_utf8: false, url: '#' do |f| .form-group = f.label t('activities.index.by_activity_id'), class: "filter-label" = f.text_field :search_activity_id , placeholder: t('activities.index.search_activity_id') = f.submit t('activities.index.filtering'), class: "float-right btn btn-primary mr-2 col-auto"
- Group_filter 파일을 만들어 사용할 수 있도록 함
class GroupFilter extend ActiveModel::Naming include ActiveModel::Conversion attr_accessor :search_activity_id def initialize(group, user, filter_condition) @group_id = group.id @user_id = user.id @search_activity_id = filter_condition[:search_activity_id] end def key "group_activities_#{@user_id}_#{@group_id}" end def attributes { search_activity_id: search_activity_id } end def persisted? false end module Scope def self.call(scope, filter) return scope if filter.nil? filter.attributes.each do |key, value| scope = scope.public_send(key, value) if value.present? end scope end end end
- Group.rb에 Scope 정의
scope :search_activity_id, -> (activity_id) { Activity.joins(:map).where(maps: {group: self}).where("activities.id like ?", "%#{activity_id}%") }
- Group_filter 파일을 만들어 사용할 수 있도록 함
- 검색 결과는 검색한 번호가 포함된 노트 리스트를 보여주는데 맵별로 나타내는 코드 구현
- group_filter를 사용하기 위해 인스턴스 변수 생성
... - else - filter_conditions = params[:group_filter] || {} - @group_filter = GroupFilter.new(group, current_user, filter_conditions)
- 맵 리스트로 보여주기 위해 Maps_controller.rb에 필터링된 맵리스트를 정의해줌
@maps = @maps.joins(:activities).where("activities.id like ?", "%#{params[:search_activity_id]}%") if params[:search_activity_id].present?
- group_filter를 사용하기 위해 인스턴스 변수 생성
- 노트 리스트를 보여주는 것에 대해 개발자님과 회의
- 맵 리스트 안에 노트리스트를 보여주는데, 몇개 이상이 되면 페이지네이션해서 보여주자는 의견이 있었으나, 만약 맵 마다 노트리스트 페이지네이션이 필요하면 URL 겹치는 문제 발생
- 새로운 방안을 모색하던 중, 결국 메인에서 그룹 카드 밖에 검색창을 두고 결과는 새로운 UI(page)로 나타내기로 결정 -> 여기에서 노트 리스트를 보여주는데 15개 기준으로 페이지네이션해서 보여줌
- 여기에 나타나는 노트 리스트는 모든 그룹, 모든 맵이 다 섞여있는 리스트이기 때문에 필터를 다시 작성 해야함
- 임의의 구현 상태에서 textarea가 아닌 form_for로 input창과 submit button이 나오도록 코드를 수정