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

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

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

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

Ruby on Rails

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

Q&A

解決済

3回答

1654閲覧

ターミナルでエラーが出るので解決したい

wesker.alice

総合スコア45

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/29 16:41

編集2020/03/29 16:51

前提・実現したいこと

前提
Ruby on Railsを学んでいる初学者です。
書籍「1日で基本が身につくRuby on Rails」にて
簡単な日記アプリを作っているところです。

チャプター6で「Scaffoldingでアプリの雛形を作成しよう」の部分で

ruby

1rails g scaffold diary title:string body:text

上記のコマンドをターミナルで実行したところエラーが出ました。
書籍では「新しいルーティングが追加されたり、コントローラーやビューファイル、アセットなどが新規作成されていることが確認できます。」とありますが、上記のコマンドでエラーが出てしまいます。

実現したい事
rails g scaffold diary title:string body:textをターミナルで実行してdiaryとしてこれまでのものを反映させた状態で作りたいです。
書籍ではなぜエラーがでないのかも知りたいです。

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

ruby

1The name 'Diary' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.

試したこと

diaryは既に使われているか、railsによって予約されているよ、と言われてしまうので、

ruby

1rails g scaffold diary title:string body:text

↓diaryの部分をd_diaryに変更しました。

ruby

1rails g scaffold d_diary title:string body:text

で新規で作れたのですが、今までのものが反映されていない状態で作成されてしまいました。
「bundle exec rails s」でサーバーを起動するも、
http://localhost:3000/d_diariesではこれまでの反映内容が反映されていないので困っています。

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

MacOS Catalina ver10.15.3
Ruby ver2.6.3
Rails ver6.0.2.1
VS Code ver1.42.1

書籍の環境
windows 10 Pro
Ruby ver2.4.1
Ruby on Rails ver5.1.2

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

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

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

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

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

s.k

2020/03/29 17:21

これまでの反映内容が反映されていない とはどういうことでしょうか。
hoshi-takanori

2020/03/29 21:35

scaffold は新しい機能をセットで作るコマンドなので、「これまでのものを反映させた状態」では作れないと思います。
wesker.alice

2020/03/30 05:33 編集

rails sでサーバーを起動し、http://localhost:3000/diariesを見た時に、 本来なら ----------------------------------- ヘッター Diaries title       Body 今日は終日休暇  公園んで読書を楽しんだ  Show Edit Destroy 今日の天気    虹が出ていて       Show Edit Destroy New Diary フッター ーーーーーーーーーーーーーーーーーー と表示されるはずですが、 Routing Error No route matches [GET] "/diaries" というエラーが表示されます。 また、rails sでサーバーを起動し、http://localhost:3000/d_diariesに接続した時は ----------------------------------- ヘッター Diaries title       Body MyString     MyText       Show Edit Destroy MyString     MyText         Show Edit Destroy New Diary フッター ーーーーーーーーーーーーーーーーーー と表示されてしまうので反映されていないとしました。 書籍と異なった結果になっているので困っています。
guest

回答3

0

アプリを作るときにDiaryという名前で新規プロジェクトを始めていそうな気がしますがいかがでしょうか?
rails new diary

アプリ名

rails new アプリ名とした場合、アプリ名もモデル名にすることができなくなります。
https://diveintocode.jp/blogs/Technology/NamingRole

上記リンクにも記載がありますが、Railsは規約が非常に大事です。

Railsの基本理念の1つ CoC (Convention over Configuration, 設定より規約) の規約部分です。
初学の段階ではこのポイントを掴むことで学習がより効率的になります。

またプログラミングを学習する上でこの命名規約は非常に重要なポイントとなります。
それでは早速今回の学習に取り組んでいきましょう。

Ruby on Railsを用いた開発では、コントローラー名は複数系、モデル名は単数形で頭文字が大文字と、様々な命名規則があります。

この規則に基づいてファイルやクラス間の連携が機能しているため、命名規則を守って開発する必要があります。

ということで、もしdiaryでプロジェクトを始めているなら、今回はRailsの基本理念、命名規則を学んだと割り切って、新しくrails new diary-appとして、最初からアプリを作り直すことをおすすめします。
復習にもなると思います。

投稿2020/03/30 05:53

no1knows

総合スコア3365

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

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

wesker.alice

2020/03/30 06:18 編集

ご回答ありがとうございます。 rails new diaryで作成するとフォルダ名は「diary」 rails new diary-appで作成するとフォルダ名は「diary-app」となると思うのですが、 進めているアプリの名前(フォルダ名)は「rails-app」となっています。 再度、復習も兼ねてrails new diary-appで作成してみようと思います。
no1knows

2020/03/30 07:43

あぁ、それならどこかでdiaryを使っているんだと思います。 diaryというクラスを探すだけなので、一度、確認してみると良いかもしれません。
wesker.alice

2020/03/30 09:30

diaryクラスを探してみます。 復習も兼ねて最初から作っていこうと思い、 cdコマンドでトップに戻って「rails new diary-app」を実行したところ、 Traceback (most recent call last): 1: from /usr/local/bin/rails:23:in `<main>' /usr/local/bin/rails:23:in `load': cannot load such file -- /Library/Ruby/Gems/2.6.0/specifications/default/exe/rails (LoadError) というエラーが返ってきました。
guest

0

ベストアンサー

まず、プログラミングにおいて名前は重要です。安易に名前を変更すると色々なものが壊れます。特にRailsは名前に強く依存したフレームワークですので、名前を変更する前にすべきことをしたかどうか確認してください。

さて、Diaryがすでに使用されているかRailsによって予約されているとのことですが、予約されていることはありませんので、すでに使用されているということになります。
可能性として最も高いのは、実はこのコマンドを過去に実行済みであるということです。もしそうであるなら、このコマンドの2度目の実行は単にスキップすれば本を読み進めることができるかと思います。

投稿2020/03/30 05:34

okuramasafumi

総合スコア117

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

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

wesker.alice

2020/03/30 06:18 編集

ご回答ありがとうございます。 おそらく、過去に1度学んでチャプター6まで進んでわからなくなり、再度最初から学び直しました。 その際にdiaryを使っていたんだと思います。 過去にdiaryを使っていたとしても別途新規(rails new 〇〇)で新しくdiaryを使えば問題ないわけではなく、1度使っているものは、別途新規で用意してもエラーが出てしまうということでしょうか?
okuramasafumi

2020/03/30 09:16

Railsのアプリを削除してもデータベースは残ります。このとき、データベースの名前は作成するアプリケーションの名前が含まれます(`hoge_development`のように)。 つまり、Railsアプリケーションを削除後(または削除しなくても)、同名のアプリケーションを作成してしまうとデータベース関係で問題が起こる可能性が高いです。 やるべきこととしては、本に従ってアプリケーションを作るとき、再度はじめからやり直すのであれば 1. データベースまで削除する 2. アプリケーションの名前を変更する のいずれかの方針でやるとよいでしょう。
wesker.alice

2020/03/30 09:56

ご回答ありがとうございます。 「1. データベースまで削除する」で対応していこうと思います。
guest

0

本をもう一度読み直してください。

投稿2020/03/29 18:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

wesker.alice

2020/03/30 06:18 編集

ご回答ありがとうございます。 「日記アプリ用のリソースを指定する為、リソース名にdiaryを指定して実行します。」と書籍にあります。 「rails g scaffold リソース名 カラム名1:データ型1 カラム名2:データ型2 カラム名3:データ型3」 リソース名にdiaryを指定して実行するとエラーが出てきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問