Ruby on Rails 雑記帳 ITかあさん

ITかあさん

RailsのDatabaseをMySQLにして、パスワードをdotenvで定数化する

RailsのDatabaseをsqlite3からMySQLにして、パスワードをdotenvで定数化する

gem追加

MySQLを使えるようにするためにmysql2
環境変数としてdotenv-rails
gemをそれぞれインストールします。

gem mysql2
gem dotenv-rails

database.yml

アプリケーションのルートディレクトリに.env ファイルを追加

DATABASE_DEV_PASSWORD = 'database_password'
DATABASE_DEV_USER = 'database_user'
DATABASE_DEV_NAME = 'database_name'
DATABASE_DEV_HOST = 'database_host'

.envはcommit対象から除外すべきなので、 .gitignoreに.envを追加します。

以上がMySQLにDatabaseを変更し、Databaseのユーザー名、パスワードをdoenvで環境変数化する手順です

RailsでControllerの名称とは違うHelperをviewで使いたい

RailsでControllerの名称とは違うHelperをviewで使いたい

悩んで悩んで完全に沼にハマったのでメモ。
RailsのController内でHelperを呼びたい時はこんなカンジで、Controller名と違う名称のHelperを呼べますが、これではusers/show.slim でPostsHelperのメソッドを呼ぶことができません。

  class UsersController < ApplicationControlelr
    include UsersHelper
    include PostsHelper

Controllerとは違う名称のHelperを呼ぶ時はこう

  class UsersController < ApplicationControlelr
    include UsersHelper
    helper PostsHelper

で、それでもなぜかundefined local variable or methodがviewで発生するなあ、、なぜかなあーと頭かかえてたらrender partial で部分テンプレートの中身だったので呼べるはずがなかった。。locals にメソッド書いて渡してあげればよかっただけでした。。

まだRails始めたばっかりでしょうもないことでハマるなあ。。

複数ActiveRecord mergeメソッドでorder by

Post.joins(:entries).merge(Entry.order("entries.id DESC"))

mergeメソッドの中で orderの基準となるフィールド名を指定するんだけど、”id”はどちらのActiveRecord (Model)でもつかっている場合、どちらのActiveRecordのidか不明のため、その場合はテーブル名と合わせて指定する必要がある。(まあ、普通そうだよね。)