やすまんの技術ブログ

駆け出しエンジニアが日々学んだこと、わからなかったことなどをまとめておくブログ。忘備録としても使います。

データの取得方法(find)

データベースからデータを取得したい場合は

決められたコードを入力しないと、取得できない、もしくはエラーになる。

 

find

@group = Group.find(params[:group_id])
 
モデル名.取得するコード(取得するもの)
 
findを使う場合は、idを取得する場合に使う。
 
 
 

referencesの使い方。

 使用方法

マイグレーションファイル

t.references :groupnull:falseforeign_key: true

 

使用するメリット

  1. 自動でindexをつけてくれる。
  2. 勝手にgroup_idを作ってくれる。(referencesの中には本当はgroup_idがっ入っている。なので、〜idの時は基本的に使った方が良い)使わないと、制約などを別でいちいちつけなければいけないため)

 

注意点 

t.references :group

 

この記述だけでは制約をつけることができないため必ず

foreign_key: true

 

をつけるようにする。

 

 

 

 

 

syntax error, unexpected tSTRING_BEG, expecting keyword_endの解決方法

結論

「:」を消す。

もしくは「,」をつける。

 

f:id:yasuMen:20191218173819p:plain

 

チャットアプリにフラッシュメッセージを実装する時に起きたエラー。

 

redirect_to root_path:notice  "アカウントが登録されました"

 

これを

 

redirect_to root_pathnotice  "アカウントが登録されました"

 

にすることで解決する。

 

 

 

 

I18n.enforce_available_localesの解決方法

結論

I18n.enforce_available_locales = false

 

 

を記述する。

 

解き方

そもそもこのエラーはバージョンに問題がある時に起きるエラーではありますが、

I18n.enforce_available_locales = false

を入力すれば解決できます。

 

configファイルに関連するところなので、修正したら一度、control + c でターミナルを切り、再びrails  で再起動させると解決する。

 

 

 

 

 

 

 

 

PendingMigrationErrorの解決方法。

f:id:yasuMen:20191216202218p:plain

 

経緯

アプリにサインアップ機能を付け加えるために、

 

ターミナルで

$ rails g migration AddNameToUser name: string

入力後

applicationcontrollerに

 before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end
 

と入力し

rake db:migrateしたら

 

f:id:yasuMen:20191216202218p:plain

ターミナルでは

StandardError: An error has occurred, all later migrations canceled:

 

Mysql2::Error: Duplicate column name 'name': ALTER TABLE `users` ADD `name` varchar(255)

が表示された。

 

原因

誤ってマイグレーションファイルを2つ作ってしまったため(一つ最初に作ってたことを忘れていた。)

 

解決方法

まずは、もう一度rake db:migrateをするが解決できず。

 

続いては

1,作成したマイグレーションファイルを削除する

2,rake db:migrate:resetをする。

3,rake db:migrateをする。

これでも解決できず。

 

よく見てみると

 

`check_pending!': Migrations are pending; run 'bin/rake db:migrate RAILS_ENV=test' to resolve 

 

との記載が、

これは、RAILS_ENV=testが途中になってるよーと教えてくれていることが判明。

ターミナルで

rails db:migrate RAILS_ENV=test

 

をして

rake db:migrateをすれば解決できる。

 

少しのミスでこんなに時間を喰われるとは。

 

 

 

 

 

 

 

 

 

 

rails gコマンドとは

結論

rails generateコマンドの略で、ターミナル上でrails gと入力することで、必要なソースコードを自動で入力した状態でファイルを作成してくれる機能。

 

使い方

コントローラーを作成したい

$ rails g controller

 

モデルを作成したい

$ rails g model