0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】モデルのアソシエーションの書き方

Posted at

環境

macOS: Big Sur Ver11.2.2
Rails: 6.0.0
Ruby: 2.6.5

困ったこと

モデルを作成したときにモデル名をアッパーキャメルケースで記述したとき、アソシエーションを書くときはどういう形式(アッパーキャメル?、キャメルケース?、スネークケース?)で書くのか迷いが生じた。
実際、書き方が違うだけでエラーが出て2時間も解決に時間を要したことから注意したいところ。

#実例
作成したモデルは以下の通り。
Acitive Hashのクラスも含んでます。

class OrderDetail < ApplicationRecord
  belongs_to :order

  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :prefecture
  belongs_to :visit_time
  belongs_to :visit_day

  # バリデーションはフォームオブジェクトクラスに記述
end
class VisitDay < ActiveHash::Base
  self.data = [
    { id: 0, name: '--' },
    { id: 1, name: '本日' },
    { id: 2, name: '明日' },
    { id: 3, name: 'あさって' }
  ]

  include ActiveHash::Associations
  has_many :order_details
end
class VisitTime < ActiveHash::Base
  self.data = [
    { id: 0, name: '--' },
    { id: 1, name: '7時〜8時' },
    { id: 2, name: '8時〜9時' },
    { id: 3, name: '9時〜10時' },
    { id: 4, name: '10時〜11時' },
    { id: 5, name: '11時〜12時' },
    { id: 6, name: '13時〜14時' },
    { id: 7, name: '14時〜15時' },
    { id: 8, name: '15時〜16時' },
    { id: 9, name: '16時〜17時' },
    { id: 10, name: '17時〜18時' },
    { id: 11, name: '18時〜19時' },
    { id: 12, name: '19時〜20時' },
    { id: 13, name: '20時〜21時' }
  ]

  include ActiveHash::Associations
  has_many :order_details
end

見ていただければ分かる通り、3つのモデル(クラス)は全てアッパーキャメルケースで定義しています。
こういう場合、アソシエーションでモデル名を記述するときはスネークケースで記述すること!
初心者の自分はアソシエーションを書くときになんとなくキャメルケースで書いてしまい、それがエラーの原因となっていました。

皆様はどうぞお気をつけください。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?