質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

739閲覧

テーブル間の関連付けでつまずいてます!

Randy_Tozuka

総合スコア19

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/07/24 07:41

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 を持つようにしたく。

  1. 問題

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

以上です。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単数ではなく、複数形でアクセスできるのかと思いました

user.employees
user.employees.create(...)
user.employees << employee

投稿2020/07/24 07:44

編集2020/07/24 07:45
unhappychoice

総合スコア1531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Randy_Tozuka

2020/07/24 08:00

早速ご教示いただき本当にありがとうございます。 これでしたか…お恥ずかしい…(笑)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問