hinokiyoの手順書

自分のためにも手順書チックなものを残していければなと思っています。

Railsでmodelをnewまたはcreateできないエラーの回避手順

動機

railsアプリ作ってseed流そうと思ったら

NoMethodError: undefined method `create!' for 〜

というエラーが出たから。

手順

下記ページにあるようにRailsの場合、アプリケーション名が予約後となるらしいです。
私の場合、モデル名とアプリケーション名が同名だったためcreateできなかったようです。
ruby on rails - undefined method `new' for Product:Module - Stack Overflow

Rails5.2にてアプリケーション名を変更します。

  1. config/application.rb
    module のところのアプリケーション名を変更して下さい。
    私の場合は元の名前に"_app"を追加しました。

Rails5.2 での外部キーの書き方の手順

動機

integer型のidが上限に達したらどうなるんだ?という疑問

手順

そもそもRails5.1からidの型がinteger(4byte)からbigint(8byte)になったようですね。
ただし、注意点があります。
いままで(5.1より前)のようにmigrationファイルに

      t.integer :user_id, null: false

なんて書いてると、userテーブルのid型はbigintなのにintegerで参照する事になってしまいます。
下記のように書きましょう。これでuser_idの型はbigintになります。

      t.references :user, null: false, foreign_key: true

deviseのomni_authとdevise_token_authのomni_authを両立する手順

動機

docker環境のrailsでVue.js使って開発。
deviseでomni_authはできる。
devise_token_authでomni_authはできる。
どちらも実装してdeviseのomni_authをすると、なぜか401 unauthorizedエラー。
なんとかして両立させたい。deviseのomni_authでログイン後にSPAを表示したいから。

手順

下記ページにあるようにdeviseのモジュールを2回記述すると両立可能です。
Devise Omniauth and DeviseTokenAuth Omniauth · Issue #666 · lynndylanhurley/devise_token_auth · GitHub

  1. deviseとdevise_token_authを両立させる実装をする。
    netで調べてください。
  2. user.rbのinclude DeviseTokenAuth::Concerns::Userの前後にdeviseのモジュール(同じもの)を記述する。
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :omniauthable, omniauth_providers: [:twitter]
    include DeviseTokenAuth::Concerns::User
    devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable,
          :omniauthable, omniauth_providers: [:twitter]

何故か上記手順でdeviseのomni_authログインが可能になります。
また、config/initializers/devise_token_auth.rbに下記を設定していれば
config.enable_standard_devise_support = true
APIaccess_token なしでも使えるようになります。

もっといい方法知ってる方、教えて下さい。