#前提・実現したいこと
rails 5.2.4.1
ruby 2.6.5
deviseのUserを親とした子要素であるPassportのインスタンスを作成(new)したい。
#エラーについて
app/controllers/passports_controller.rb:10:in `new' Started GET "/users/1/passports/new" for ::1 at 2020-03-27 00:12:13 +0900 Processing by PassportsController#new as HTML Parameters: {"user_id"=>"1"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.4.1/lib/active_record/log_subscriber.rb:98 Passport Load (0.2ms) SELECT "passports".* FROM "passports" WHERE "passports"."user_id" = ? LIMIT ? [["user_id", 1], ["LIMIT", 1]] ↳ app/controllers/passports_controller.rb:10 Completed 500 Internal Server Error in 4ms (ActiveRecord: 0.4ms) NoMethodError (undefined method `new' for nil:NilClass): app/controllers/passports_controller.rb:10:in `new'
#該当のソースコード
controllers/passports_controller.rb
def new @passport = current_user.passport.new end
models/passport.rb
class Passport < ApplicationRecord has_one :user validates :purpose, presence: true validates :goal, presence: true end
models/user.rb
class User < ApplicationRecord has_many :posts, dependent: :destroy has_many :comments has_one :passport, dependent: :destroy devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :name, presence: true, length: {maximum: 30}, uniqueness: true def update_without_current_password(params, *options) params.delete(:current_password) if params[:password].blank? && params[:password_confirmation].blank? params.delete(:password) params.delete(:password_confirmation) end result = update_attributes(params, *options) clean_up_passwords result end end
migrateファイル
class CreatePassports < ActiveRecord::Migration[5.2] def change create_table :passports do |t| t.string :purpose, null: false t.string :goal, null: false t.string :passport_image t.references :user, foreign_key: true, null: false t.timestamps end end end
#試したこと
controllers/passports_controller.rbの
current_user.passport.new部分を下記に変更
・User.passport.new
→undefined method passport' for #<Class:0x00007fc8774d3770> ・User.Passport.new →undefined method
Passport' for #Class:0x00007fc8787a45e8
・current_user.Passport.new
→undefined method `Passport' for #User:0x00007fc877d0dfd0
上記は全て同じエラーが出てしましました。
もし、気になる点等ございましたら、コメントください。
また、情報不足ございましたら併せてコメントいただければ幸いです。
お手数ですがよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/28 11:58