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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Ruby on Rails

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

Q&A

1回答

830閲覧

rails db:migrate:resetで引数エラーが出る

mayok

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/07 15:34

編集2020/06/07 15:49

前提・実現したいこと

seeds.rbに記述した投稿を反映させるため
rails:db:migrate:reset、②rails db:seedを実行したいです。

今出ている下記のエラーは①の段階で出力されたものです。

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

ArgumentError: wrong number of arguments (given 1, expected 2..3)

該当のソースコード

(seeds.rb) 30.times do |n| name = Faker::Name.first_name email = "sample#{n+1}@sample.com" password = "password" User.create!( name: name, email: email, password: password, password_confirmation: password, confirmed_at: Date.today ) end users = User.all user = users.first following = users[2..20] followers = users[3..10] following.each { |followed| user.follow(followed) } followers.each { |follower| follower.follow(user) }
($ rails db:migrate:status) database: Status Migration ID Migration Name -------------------------------------------------- up 20200229121813 Create users up 20200229123719 Create microposts up 20200419123045 Add password digest to users up 20200419133336 Add devise to users up 20200419134321 Add columns to users up 20200502164930 Remove password digest from users up 20200515021956 Create posts up 20200517060308 Remove provider from users up 20200517060357 Remove uid from users up 20200517060459 Remove user name from users up 20200517081516 Add confirmable to users up 20200517083554 Add status to users up 20200520140801 Add columns to microposts up 20200527063725 Add column to microposts up 20200527143527 Add image column to microposts down 20200601162732 Create likes down 20200605181031 Create bookmarks down 20200607084912 Create relationships
(user.rb) class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable, :omniauthable has_many :microposts, dependent: :destroy has_many :likes, dependent: :destroy has_many :liked_posts, through: :likes, source: :micropost has_many :bookmarks, dependent: :destroy has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :following, through: :active_relationships, source: :followed has_many :followers, through: :passive_relationships, source: :follower validates :name, presence: true, length: { maximum: 50 } validates :email, presence: true, length: { maximum: 255 } def self.guest find_or_create_by!(name: 'guest', email: 'guest@example.com') do |user| user.password = SecureRandom.urlsafe_base64 user.confirmed_at = Time.zone.now end end def follow(other_user) following << other_user end def unfollow(other_user) active_relationships.find_by(followed_id: other_user.id).destroy end def following?(other_user) following.include?(other_user) end end

試したこと

記述したエラーが出力される前に
Mysql2::Error: Can't DROP 'time'; check that column/key existsというエラーが出ていました。
この原因となっていたmigrationは、micropostテーブルからtimeカラムを削除するという指示のものだったのですが、同時に直接ファイルからカラムを削除してしまったためDBをリセットするとCan't DROP 'time'エラーが出るのだと考え該当のmigrationファイルを削除しました。

検索しても情報があまり無かったためご教授いただけると幸いです。

必要な情報がありましたら追加で掲載するのでよろしくお願いします。

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

ruby 2.6.3
rails 6.0.2.1
macOS Catalina 10.15.4

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

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

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

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

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

guest

回答1

0

rails:db:migrate:reset ではなく rails:db:reset でしょう。

投稿2020/06/07 21:04

winterboum

総合スコア23567

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

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

mayok

2020/06/07 23:05

```rails db:reset```は実行できたのですが```rails db:seed```の際に```ActiveRecord::RecordInvalid: バリデーションに失敗しました: メールアドレスはすでに存在します```とのエラーが出てしまいました。 seedデータが作り直しされずユーザーが重複して作成されたからでしょうか?
winterboum

2020/06/07 23:08

そのようですね。 ただ、(mayokさんが)誤解しているかな? 「seedデータが作り直しされず」とありますが、seedはdb:resetなどでは影響を受けません。dbにデータを埋め込むための program、data ですから。 seedのデータを確認して、重複ないか見てください
mayok

2020/06/08 03:55

確かにdb:reset→db:seedの流れで作り直されると誤解しておりました。ありがとうございます! seedデータを確認したのですが、emailの重複エラーがなぜ出るのか分かりませんでした。ユーザーを複数作成するに当たり、バリデーションエラーが出ないようemail内に変数を入れております。また、このseedデータは一度作成済みで今回フォロー/フォロワーの関係性のみ追加したいです。
winterboum

2020/06/08 04:50

さてどうしたものか。本物アドレスですよね。データ載せるわけにはいかないでしょうね。
mayok

2020/06/08 11:11

データを載せるというのはどのデータを提示すれば良いでしょうか? また、seeds.rbの内容を一度削除して新たに作り直すということは一般的ではないやり方ですか?
winterboum

2020/06/08 11:52

seedの作り直しは構わないと思いますよ。 データを載せるというのは、なぜ「メールアドレスはすでに存在します」になるのか? を見るために、seedのprogramとデータです。
mayok

2020/06/08 15:08

理解力が乏しくて申し訳ないのですが「該当するソースコード」にて提示しているseeds.rbとは別のデータが必要ということでしょうか?
winterboum

2020/06/08 22:15

seeds.rb見落としてました。 これでしたら、メールアドレス重複のエラーはでないですね。『一回しかしない』なら。 もしかして一度seedを実行し、その後でfollower関係を追加してもう一度実行してません?「seeds.rbの内容を一度削除して新たに作り直すということは一般的ではないやり方ですか?」というのはそういう意味? 複数回実行する可能性がある場合は、そういうcodeにしなければなりません。 例えば いきなり create するのではなく、find_or_create_by してから updateするというように
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問