acts-as-taggable-on을 checkbox로 조작

4737 단어 루비Rails슬림
Rails에서 태그를 만드는 데 유용한 acts-as-taggable-on이라는 Gem이 있습니다.
그러나 기본적으로

이런 손으로 입력하는 필드에 박는 장면을 상정하여 사용하고 있다고 생각합니다.
이것이,

이런 식으로 입력할 수 있으면 편리하죠?

인터넷에 정보가 많지 않고 본가의 젬 사이트
htps : // 기주 b. 이 m / mb ㅇ gh / 아 cts - 아 - ta b- 온
에도 나오지 않았기 때문에 여기에 방법을 올려 둡니다.

기본적으로 Gem을 Bundle하여 테이블을 만들고 Model과 Controller 만드는 곳까지는 함께 있습니다.
접어 버리면 불친절하다고 생각하기 때문에 만약을 위해 써 두면,

Gemfile에 다음을 기재


gem 'acts-as-taggable-on', '~> 6.0'

번들 실행


$ bundle

Tag 관련 테이블 만들기


$ rake acts_as_taggable_on_engine:install:migrations
$ rake db:migrate

모델



기본적으로 사용하는 측(이번에 말하면 Restaurantant)의 Model에 acts_as_taggable_on을 기재한다.
이번은 태그에 이름을 붙이고 있기 때문에 이하와 같은 표기가 되어 있지만 acts_as_taggable 밖에 쓰지 않으면 디폴트는 tag라는 명칭이 된다.

restaurant.rb
    class Restaurant < ActiveRecord::Base
      acts_as_taggable_on :cuisines

컨트롤러



스트롱 파라미터에도 기재. 이번 cuisine의 명칭을 붙이고 있으므로 변수로서는 cuisine_list가 된다.
배열로 정의하므로 파라미터 뒤쪽에 기술한다. 콜론의 위치에도 주의.

restaurant_controller.rb

    def restaurant_params
      params.require(:restaurant).permit(
        :id, :other,
        cuisine_list: []
      )

보기



여기에서 별로 정보가 나오지 않는 곳. ul, li로 작성한 리스트로 내는 경우의 예가 된다.
이번에는 Cuisine이라는 모델 전 건 내고 그 중 cuisine_list에 포함되어 있는 것이 있으면 체크를 넣는다는 만들기가 되어 있으므로 이런 표기가 된다.
한층 더 중요한 점이지만, label 태그와 그 뒤에 오는 input 태그의 id의 명칭을 맞추지 않으면 IE11과 Firefox에서 체크 박스가 움직이지 않는다는 문제가 있으므로 여기를 맞출 필요가 있다. 뭔가 이상하다고 생각하면 input 태그의 id 속성을 확인하는 것이 좋습니다.

restaurant/create.rb
          ul.field.option_check
            - Cuisine.all.each do |cuisine|
              li
                label for="restaurant_cuisine_list_#{cuisine.id.to_s}"
                  = r.check_box :cuisine_list, {multiple: true, checked: @restaurant.cuisine_list.include?(cuisine.id.to_s)}, cuisine.id.to_s, ''
                  span.checkbox =  cuisine.cuisine_name

덧붙여서 여기는 slim으로 쓴 경우의 예이므로 다른 템플릿 엔진 사용하고 있는 경우는 적절히 읽어 주세요.

좋은 웹페이지 즐겨찾기