質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

232閲覧

seedの更新コマンドは存在しますか?

Java_student

総合スコア83

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2024/11/10 15:25

編集2024/11/11 20:40

実現したいこと

サーバーにアプリをアップしていたのですが、諸々機能をアップデートさせてseedの情報も更新したのですが、更新のさせるコマンドが分かりません。
教えて頂きたいです。
またシードを更新していないのか、新しい機能に関するマイグレーションファイルの為にbin/rails db:migrateを実行してアップデートしたらシードに登録したアカウントがログインできなくなりました。

発生している問題・エラーメッセージ

seedの更新が分からない。

seed.rb

1# This file should contain all the record creation needed to seed the database with its default values. 2# The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup). 3# 4# Examples: 5# 6# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) 7# Character.create(name: 'Luke', movie: movies.first) 8 9user_data = [{id: 1, 10 name: "*********", 11 furiganaName: "*********", 12 last_name: "*********", 13 first_name: "*********", 14 furigana_last_name: "*********", 15 furigana_first_name: "*********", 16 category: "個人", 17 telephone_number: "*********", 18 post_code:"*********", 19 address: "*********", 20 email: "*********", 21 login_id: "*********", 22 password: "*********, 23 password_confirmation: "*********", 24 admin: true}] 25 26user_data.each do |user| 27  user = User.find_or_initialize_by(email: user_data[:email]) 28  user.attributes = user_data 29  user.save! if user.new_record? || user.changed? 30end

試したこと

bin/rake db:seedはすでにEメールが存在しているで更新できませんでした。
他のやり方だと、 bin/rails db:resetで一回データベースを初期化しないといけなく、これからアプリを運営する上でアップデートするたびにデータベースを再構築するわけには当然行かないので、困っています。

補足情報(FW/ツールのバージョンなど)

ruby 3.2.2
rails 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2024/11/12 05:46

user_data = [{id: 1, ... }] となっていますので、 user = User.find_or_initialize_by(email: user_data[:email]) は、 user = User.find_or_initialize_by(email: user_data[0][:email]) とするのではないでしょうか。
guest

回答1

0

ベストアンサー

それは seedの作り方次第です。
私は db:seedを何度行っても重複作成しないようにしています。
key となる 項目で find_or_initialize_by したあと attribute = で値を設定し,save

投稿2024/11/11 01:33

winterboum

総合スコア23549

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2024/11/11 02:13

以前、seed_fuというgemを使っていましたが、開発が止まってしまったのでupsert_allを使いだすもデフォルト値やタイムスタンプが入らないなどの問題があり、結局は似たようなことを行うコードを手書きして回しています。 https://zenn.dev/ysi831/articles/465d2835f281b2 (同じようなことで悩んでいた人の例)
winterboum

2024/11/11 09:34

私のと同じ考え方の方法です。
Java_student

2024/11/11 10:15

現在の質問に書かれているseed.rbでrails db:seedコマンドを実行したところ、 TypeError: no implicit conversion of Symbol into Integer (TypeError) というエラーが起きてしまったのですが、これはidのIntegerが問題になっているのでしょうか?
winterboum

2024/11/11 12:16

どこで起きたか表示されてませんか?
Java_student

2024/11/11 20:40

エラー文を見たのですが、下記の箇所ですかもしれません。 /home/ubuntu/environment/プロジェクト/db/seeds.rb:27:in `block in <main>' /home/ubuntu/environment/プロジェクト/db/seeds.rb:26:in `each' /home/ubuntu/environment/プロジェクト/db/seeds.rb:26:in `<main>' コードで言うと user_data.each do |user|   user = User.find_or_initialize_by(email: user_data[:email]) らへんでした。
winterboum

2024/11/11 22:41

「かもしれません」と確信持てないなら全文載せてください。 「ここです」というのが正しければ原因はわかったので自力解決できます。 その分析が正しくないから解決できないのですから
Java_student

2024/11/12 04:54

誠に申し訳ありません。 全文を載せさせていただきます。 Running via Spring preloader in process 2581 rake aborted! TypeError: no implicit conversion of Symbol into Integer (TypeError) /home/ubuntu/environment/プロジェクト/db/seeds.rb:27:in `block in <main>' /home/ubuntu/environment/プロジェクト/db/seeds.rb:26:in `each' /home/ubuntu/environment/プロジェクト/db/seeds.rb:26:in `<main>' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/railties-6.1.7.6/lib/rails/engine.rb:566:in `load' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/railties-6.1.7.6/lib/rails/engine.rb:566:in `block in load_seed' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/execution_wrapper.rb:91:in `wrap' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/railties-6.1.7.6/lib/rails/engine.rb:640:in `block (2 levels) in <class:Engine>' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/callbacks.rb:126:in `instance_exec' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/callbacks.rb:126:in `block in run_callbacks' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/callbacks.rb:137:in `run_callbacks' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/railties-6.1.7.6/lib/rails/engine.rb:566:in `load_seed' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activerecord-6.1.7.6/lib/active_record/tasks/database_tasks.rb:450:in `load_seed' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activerecord-6.1.7.6/lib/active_record/railties/databases.rake:392:in `block (2 levels) in <main>' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/fork_tracker.rb:10:in `block in fork' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/fork_tracker.rb:10:in `block in fork' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/fork_tracker.rb:8:in `fork' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/fork_tracker.rb:8:in `fork' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/fork_tracker.rb:27:in `fork' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/fork_tracker.rb:8:in `fork' /home/ubuntu/.rvm/gems/ruby-3.2.2/gems/activesupport-6.1.7.6/lib/active_support/fork_tracker.rb:27:in `fork' <internal:/home/ubuntu/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require' <internal:/home/ubuntu/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:85:in `require' -e:1:in `<main>' Tasks: TOP => db:seed (See full trace by running task with --trace)
winterboum

2024/11/12 05:25

選んだところは合ってるみたいですね。 なのになぜ原因がわからないか、ですが。。。いくつかありますがとりあえず その行のあたりと参照している記事の seed.rbの該当部をじっくり比べてみて。 意識的に変えた所と写経しそこなった所 と有るでしょうが、違いに気がつけばその違いがどういう現象となるか、考えることができるでしょう
Java_student

2024/11/12 14:33

今、質問に書かれているseed.rbなのですが、更新するアカウントは一つなので[]は必要ないと思い居たのですが、配列に入れるみたいな形はちょっと違うかなと思ったのですが、[]は無くしても可能でしょうか?
winterboum

2024/11/12 14:37

一人しか登録しないつもりなら [] 無しでもできますが、その場合はeachも取る必要ありますよ? その辺りもわからないとすると、 まずは 参考codeの通りにやって動くのを確認してからの工夫の方が良いですよ。 動かなくなったら 工夫に原因がある、って明確だからなにが悪いのか、の勉強になるでしょう
Java_student

2024/11/12 14:42

下記の記述で更新することが出来ました。 ありがとうございます。 user_data = {id: 1, name: "*************", furiganaName: "*************", last_name: "*************", first_name: "*************", furigana_last_name: "*************", furigana_first_name: "*************", category: "個人", telephone_number: "*************", post_code:"*************", address: "*************", email: "*************", login_id: "*************", password: "*************", password_confirmation: "*************", admin: true} @user = User.find_or_initialize_by(email: user_data[:email]) @user.attributes = user_data @user.save! if @user.new_record? || @user.changed?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問