Rails에서 태그 투고 기능 구현 (도입편)
8432 단어 젬태그acts-as-taggable-onRails5
gem을 사용한 태그 기능 구현 (비망록)
개인 앱 개발에서 투고한 기사에 태그를 붙이고 싶어 구현했습니다만,
gem의 도입에 수고가 걸렸으므로 비망록으로서 기사로 해 보았습니다!
개발 환경
Rails 버전 5.2.4.1
ruby 버전 2.5.1
acts-as-taggable-on 버전 6.0.0
데이터베이스 mySQL
태그 기능을 구현하려면
1. 스스로 구현한다.
2. gem 'gutentag tags' 사용
3. gem 'acts-as-taggable-on' 사용
처음에는 gutentag tags를 사용하여 구현했습니다.
・태그 기능의 실장에 대해 조사하면 「acts-as-taggable-on」은 도입시에 마이그레이션 에러가 나오므로, gutentag tags로 실장한 기사를 발견! 내용도 간단할 것 같았기 때문에 조속히 실장해 보았다. 그러나 오류는 발생하지 않지만 DB에 값이 저장되지 않음
(아마 자신이 라우팅을 중첩했을 경우의 인스턴스 변수의 전달 등이 마스터하지 않는 것이 원인입니다)
또한 gutentag 자체는 rails6에 바로 대응한 commit이 있는 +issue의 close율도 100%라는 점은 있지만, pat라는 창조자 밖에 거의 보수하고 있는 것과 acts-as-taggable-on은 사용 하고 있는 사람이 많기 때문에, 또 수정판이 오를지도 모른다는 점을 근거로 「acts-as-taggable-on」으로 실장하기로 했다.
↓gutentag tags 참고 기사
gem "gutentag tags"를 사용하여 태그 기능 구현 ~Ruby on Rails~
Rails6에서 블로그 태그의 acts-as-taggable-on이 오류가되었기 때문에 다른 태그 gem (gutentag tags) 사용
acts-as-taggable-on을 사용하여 구현
'acts-as-taggable-on'은 태그 기능을 구현할 수 있는 gem
여러가지 방법이 준비되어 있습니다만, 자세한 것은 참고 기사 또는 GitHub를 확인해 보세요.
find_related_skills
같은 태그와 관련된 작업이 표시됨taggings_count
메소드가 아니지만 해당 태그의 사용 횟수가 표시됩니다.tag_counts
모든 태그 데이터를 얻을 수 있습니다.Rails | acts-as-taggable-on을 사용한 태그 기능 구현 | 비망록
acts-as-taggable-on Git Hub
도입 내용
1.Gem 추가 및 설치
(Gemfile)
gem 'acts-as-taggable-on', '~> 6.0' #追加
$ bundle install
2. 마이그레이션 파일 설치
$ rails acts_as_taggable_on_engine:install:migrations
성공하면 마이그레이션 파일이 추가됨
Copied migration 20200406074226_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20200406074227_add_missing_unique_indices.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20200406074228_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20200406074229_add_missing_taggable_index.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20200406074230_change_collation_for_tag_names.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20200406074231_add_missing_indexes_on_taggings.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
3. 마이그레이션 실행
$ rails db:migrate
그러나 여기에 오류가 발생했습니다.
Mysql2::Error: Cannot drop index 'index_taggings_on_tag_id': needed in a foreign key constraint: DROP INDEX `index_taggings_on_tag_id` ON `taggings`
~
ActiveRecord::StatementInvalid: Mysql2::Error: Cannot drop index 'index_taggings_on_tag_id': needed in a foreign key constraint: DROP INDEX `index_taggings_on_tag_id` ON `taggings`
~
Mysql2::Error: Cannot drop index 'index_taggings_on_tag_id': needed in a foreign key constraint
조사해 보면 DB를 「mySQL」로 하고 있는 경우는 초기 도입으로 여러가지 문제가 있는 것 같기 때문에 migrate를 실행하기 전에
rails acts_as_taggable_on_engine:tag_names:collate_bin
를 실행할 필요가 있습니다.※tags테이블의 name 컬럼은 'binary encoded string'(PC에서 취급하는 2진수의 문자열)로서 읽히기 때문에, 'utf8_bin'로 읽어야 하는 것 같습니다.
$ rails acts_as_taggable_on_engine:tag_names:collate_bin #実行
또한 젬의 버그로,
acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb
의의 15행에서 외래 키를 설정했음에도 불구하고,
t.references :tag, foreign_key: { to_table: ActsAsTaggableOn.tags_table }
add_missing_unique_indices.acts_as_taggable_on_engine.rb
의 11행에서 외래 키를 삭제하지 않고 인덱스를 삭제하려고 하기 때문에 오류가 발생합니다.remove_index ActsAsTaggableOn.taggings_table, :tag_id if index_exists?(ActsAsTaggableOn.taggings_table, :tag_id)
GitHub issues에서 결함 보고서의 내용을 확인
(add_missing_unique_indices.acts_as_taggable_on_engine.rb)
remove_index ActsAsTaggableOn.taggings_table, :tag_id if index_exists?(ActsAsTaggableOn.taggings_table, :tag_id) #削除
if index_exists?(ActsAsTaggableOn.taggings_table, :tag_id) #追加
remove_foreign_key :taggings, :tags #追加
remove_index ActsAsTaggableOn.taggings_table, :tag_id #追加
end #追加
수정 : 마이그레이션이 오류가되는 버그 수정
이제 마이그레이션 파일을 도입할 수 있습니다!
버그 제거 전에
rails db:migrate
를 실행하면 ArgumentError가 발생합니다.한번 눈의 migrate 실행시에 최초의 파일만 읽고 있기 때문이군요!
이 경우
rails db: rollback
에서 migrate를 실행하기 전의 상태로 되돌리십시오.*
rails db:migrate:status
에서 6 개의 파일이 "down"상태에 있는지 확인하십시오.마지막으로
조금 길어져 버렸기 때문에, 구현 내용은 다른 기사로 투고하려고 생각하고 있습니다.
그 밖에 참고로 한 기사는 다음과 같습니다.
acts-as-taggable-on 배포 중 오류
Rails 5.2에서 태그 게시 기능을 구현하기 위해 gem "acts-as-taggable-on"을 사용해 보았습니다.
실장편 투고했습니다!
함께 참고해 주시면 좋겠습니다.
Rails에서 태그 게시 기능 구현 (실장편)
Reference
이 문제에 관하여(Rails에서 태그 투고 기능 구현 (도입편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kazuhj/items/2913ab23d80b3ffe680b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)