Ruby, Rails ともに初心者です。Ruby on Rails を使ってapp開発のトレーニング中です。標記件、下記の通りで困っております。どなたかお助けくださいますようお願いいたします。
0. 環境
macOS Catalina(10.15.6)
ruby 2.6.3p62 (2019-04-16 revision 67580)
Rails 6.0.3
0. 状況
2つのモデル( User と Employee )を "has_many", "belongs_to" で関連付けようとしています。
user は 多くの employee を持つようにしたく。
- 問題
rails consoleでデータベースにいる最初のユーザーを変数userに代入。そのuserオブジェクトを使って employee = user.employee.create(name: "Lorem ipsum")を実行することができず困っております。解決法をご教示いただければありがたくよろしくお願いします。
#ターミナル #変数userにはあらかじめ既存データを代入済み irb(main):047:0> user => #<User id: 1, email: "kaz****me.com", created_at: "2020-07-22 05:09:28", updated_at: "2020-07-22 06:40:59", company: nil, country: nil> #変数employeeにもあらかじめ既存データを代入済み irb(main):048:0> employee => #<Employee id: 1, name: "Jake E Lee", user_id: 1, created_at: "2020-07-24 05:34:40", updated_at: "2020-07-24 05:34:40"> #employee にヒモづく user は確認できます irb(main):049:0> employee.user => #<User id: 1, email: "kaz****@me.com", created_at: "2020-07-22 05:09:28", updated_at: "2020-07-22 06:40:59", company: nil, country: nil> #しかしながら user にヒモづく employee が undefined method になってしまいます… irb(main):050:0> user.employee Traceback (most recent call last): 1: from (irb):50 NoMethodError (undefined method `employee' for #<User:0x00007fc5436231c0>) irb(main):051:0> #新しいemployeeを作ろうとしても同様のエラーが出ます irb(main):051:0> employee = user.employee.create(name: "Lorem ipsum") Traceback (most recent call last): 2: from (irb):51 1: from (irb):51:in `rescue in irb_binding' NoMethodError (undefined method `employee' for #<User:0x00007fc5436231c0>) irb(main):052:0>
has_many :employees
belongs_to :user
…と単数・複数は合っているようです。
関連しそうなコードは下記の通りです。
ruby
1#app/modeks/user.rb 2 3class User < ApplicationRecord 4 has_many :employees 5 # Include default devise modules. Others available are: 6 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 7 devise :database_authenticatable, :registerable, 8 :recoverable, :rememberable, :validatable 9 10end
ruby
1#app/models/employee.erb 2 3class Employee < ApplicationRecord 4 belongs_to :user 5 validates :user_id, presence: true 6end
ruby
1#db/schema.rb 2 3ActiveRecord::Schema.define(version: 2020_07_24_050800) do 4 5 create_table "employees", force: :cascade do |t| 6 t.string "name" 7 t.integer "user_id", null: false 8 t.datetime "created_at", precision: 6, null: false 9 t.datetime "updated_at", precision: 6, null: false 10 t.index ["user_id"], name: "index_employees_on_user_id" 11 end 12 13 create_table "users", force: :cascade do |t| 14 t.string "email", default: "", null: false 15 t.string "encrypted_password", default: "", null: false 16 t.string "reset_password_token" 17 t.datetime "reset_password_sent_at" 18 t.datetime "remember_created_at" 19 t.datetime "created_at", precision: 6, null: false 20 t.datetime "updated_at", precision: 6, null: false 21 t.string "company" 22 t.string "country" 23 t.index ["email"], name: "index_users_on_email", unique: true 24 t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 25 end 26 27 add_foreign_key "employees", "users" 28end 29
以上です。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/24 08:00