Rails5.1.3でWebアプリケーション制作の勉強をしています。
新規にStaffMembersテーブルにメンバー登録した際に1対1の関係にあるStaffYearsテーブルにもレコードを新規に作りたいのですが
作成できずに困っております。コードは以下のようにしています。
staff_member.rb class StaffMember < ActiveRecord::Base has_one :staff_year, dependent: :destroy, autosave: true
staff_year.rb class StaffYear < ActiveRecord::Base belongs_to :staff_member
staff_members_controller.rb def new @staff_member = StaffMember.new end def create @staff_member = StaffMember.new(staff_member_params) if @staff_member.save @staff_member.build_staff_year unless @staff_member.staff_year -----関連付けて新規に登録するように記述。 flash.notice = '社員アカウントを新規登録しました。' redirect_to :admin_staff_members else render action: 'new' end end
createアクションにstaff_yearsテーブルに登録するようにコードを記述しました。
この状態で、メンバー登録はできています。しかし、関連付けられたstaff_yearsテーブルにはレコードができていません。
記述場所が悪いのか、コード自体が間違っているのかわからないのでどなたか教えていただけないでしょうか?宜しくお願いします。
追記
エラーが発生してしまいます。
StaffYear Load (0.8ms) SELECT `staff_years`.* FROM `staff_years` WHERE `staff_years`.`staff_member_id` = 5 LIMIT 1 (2.7ms) ROLLBACK Completed 500 Internal Server Error in 256ms (ActiveRecord: 12.2ms) NoMethodError (undefined method `create' for nil:NilClass): app/models/staff_member.rb:35:in `save_staff_year'
実行したコード after_create :create_staff_year private def create_staff_year self.staff_year.create(year_check: 2018)----ここでエラー発生。 end
追記2:
コンソールで試したところ
irb(main):002:0> StaffYear.create(staff_member_id: 5, year_check: 2018) で登録に成功しました。
staff_member_id :5で登録できましたが、5の部分を新規登録されたstaff_memberのidを
入れる方法を教えていただけないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/27 06:20
2018/03/27 06:27
2018/03/27 06:47
2018/03/27 07:19
2018/03/27 09:22
2018/03/27 09:58