【Rails】acts-as-taggable-on으로 작성한 태그 기능을 seed 데이터에 도입한다

목적



자신의 앱에 더미 사용자를 만듭니다.
그 때 acts-as-taggable-on으로 작성한 태그의 거동이나 외관의 확인을 해 갑니다.

참고:
Rails에 태그 기능을 붙인다. acts-as-taggable-on 사용
rails acts-as-taggable-on으로 태그를 지정한 후 태그를 사용하여 검색

환경



windows10 홈
우분투 20.04.1 on WSL2
rails 6.0.3
루비 2.6.6

seed 데이터 작성 (실패)



우선 태그 표시 없이 데이터를 만들 수 있는지 시험해 본다.

seeds.rb
50.times do 
  user = User.create!( 
    name: Faker::Games::Pokemon.unique.name, 
    email: Faker::Internet.email, 
    password: "password", 
    password_confirmation: "password" 
  ) 
end 
15.times do |n| 
  User.each do |user| 
    user.microposts.create!( 
      photo: open("./db/fixtures/#{n + 1}.jpeg"), 
      detail: Faker::Hacker.say_something_smart 
    ) 
  end 
end

무사 데이터가 투입되었으므로, 태그 첨부의 데이터를 투입할 수 있는지 시험해 본다.

seeds.rb (실패 예)
User.limit(5).each do |user|  # 5人のユーザーを選んで各々をuserに代入 
  15.times do |n|             # user1人につき15回投稿作成する 
    user.microposts.create!( 
      photo: open("./db/fixtures/#{n + 1}.jpeg"), 
      detail: Faker::Hacker.say_something_smart 
    ) 
    array = Faker::Food.dish.split("") 
    array.each{ |tag| 
      tag_list = ActsAsTaggableOn::Tag.new 
      tag_list.name = tag 
      tag_list.save 
    } 
  end 
end

이것이라면 Faker안에 있는 단어를 공백("")으로 단락지어 배열로 해, 하나하나를 tag_list에 대입해 주는 것이 아닐까 생각하고 있었습니다.



결과, 데이터를 투입할 수 있었지만 각 게시물에 태그가 붙어 있지 않다는 것에....
조사한 바, 아무래도 문자열의 배열화는 할 수 없는 것 같다.

참고 : 배열 같은 문자열을 잘 배열로 변환

seed 데이터 작성 (성공)



어떻게 micropost 인스턴스와 tag_list를 연결하는지 모르겠습니다.
그렇게 생각하면서 이 기사 를 보고 있으면 다음의 인용 부분에서 갑자기 튀었다.

...
product = Product.create (
...
)
product.tag_list.add "tag1", "tag2"
product.save
...

그런가, micropost 인스턴스를 만들 때 동시에 micropost를 정의하면 좋다!
그 후 tag_list도 정의하면 micropost.tag_list에서 micropost와 tag_list를 연결할 수 있다.

seeds.rb
User.limit(5).each do |user|  # 5人のユーザーを選んで各々をuserに代入 
  15.times do |n|             # user1人につき15回投稿作成する 
    micropost = user.microposts.create!( 
      photo: open("./db/fixtures/#{n + 1}.jpeg"), 
      detail: Faker::Hacker.say_something_smart 
    ) 
    tag_list = ActsAsTaggableOn::Tag.new # tag_listを定義
    micropost.tag_list = Faker::Food.dish # micropostとtag_listを結びつける
    micropost.save 
  end 
end


안전 태그가 있는 게시물 데이터를 만들 수 있습니다.

좋은 웹페이지 즐겨찾기