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

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

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

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

734閲覧

rails referenceしたときのnewについて

r.haja

総合スコア6

Ruby on Rails 5

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/26 15:41

#前提・実現したいこと
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

上記は全て同じエラーが出てしましました。

もし、気になる点等ございましたら、コメントください。
また、情報不足ございましたら併せてコメントいただければ幸いです。
お手数ですがよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

has_oneのものを作成したい場合は、current_user.build_passportのような専用のメソッドを使ってください。

投稿2020/03/26 22:15

編集2020/03/26 22:16
maisumakun

総合スコア145184

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

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

r.haja

2020/03/28 11:58

コメントありがとうございます! 無事、できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問