【Rails】acts-as-taggable-onで作成したタグ機能をseedデータに取り入れる
目的
自作のアプリにダミーユーザーを作成。
その際acts-as-taggable-onで作成したタグの挙動や見栄えの確認をしていきます。
参考:
Railsにタグ機能をつける。acts-as-taggable-on使用
rails acts-as-taggable-on でタグ付け後、タグを使って検索
環境
windows10 home
Ubuntu 20.04.1 on WSL2
rails 6.0.3
ruby 2.6.6
seedデータ作成(失敗)
まずはタグ表示無しでデータが作れるか試してみる。
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
無事データが投入されたので、タグ付きのデータが投入できるか試してみる。
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を結び付けられる。
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
Author And Source
この問題について(【Rails】acts-as-taggable-onで作成したタグ機能をseedデータに取り入れる), 我々は、より多くの情報をここで見つけました https://qiita.com/luckylundy/items/1222a3c547bb70ab08f1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .