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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

2回答

838閲覧

rails has_oneで関連づけたmodelの情報が毎回初期化されてしまう

r.haja

総合スコア6

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/29 08:23

#前提・実現したいこと
rails 5.2.4.1
ruby 2.6.5

has_one :passport
belongs_to :user

にて関連づけたpassportのshowを表示する。

#エラーについて
エラーではないのですが、showを表示する際にURLを入力しているタイミングで
passport_controllerのnewが処理され、
@passport = @user.build_passport
上記コマンドでPassportが初期化され、インスタンスエラーが発生しshowが表示されない。

Started GET "/users/1/passports/new" for ::1 at 2020-03-29 16:55:22 +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 User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/controllers/passports_controller.rb:9 Passport Load (0.3ms) SELECT "passports".* FROM "passports" WHERE "passports"."user_id" = ? LIMIT ? [["user_id", 1], ["LIMIT", 1]] ↳ app/controllers/passports_controller.rb:10 (0.1ms) begin transaction ↳ app/controllers/passports_controller.rb:10 Passport Destroy (2.0ms) DELETE FROM "passports" WHERE "passports"."id" = ? [["id", 11]] ↳ app/controllers/passports_controller.rb:10 (37.9ms) commit transaction ↳ app/controllers/passports_controller.rb:10 Rendering passports/new.html.erb within layouts/application Rendered partial/_error_messages.html.erb (4.1ms) Rendered passports/new.html.erb within layouts/application (40.0ms) Rendered partial/_navbar.html.erb (1.6ms) Rendered partial/_flash.html.erb (0.7ms) Rendered partial/_footer.html.erb (0.7ms) Completed 200 OK in 695ms (Views: 545.6ms | ActiveRecord: 40.9ms)

#該当のソースコード

app/controllers/passports_controller.rb

class PassportsController < ApplicationController before_action :authenticate_user! def show @passport = Passport.find_by(id: params[:id]) end def new #毎回パスポートデータが消される。 @user = User.find(params[:user_id]) @passport = @user.build_passport end

app/models/user.rb

class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable has_many :posts, dependent: :destroy has_many :comments has_one :passport, dependent: :destroy

app/models/passport.rb

class Passport < ApplicationRecord belongs_to :user validates :purpose, presence: true validates :goal, presence: true mount_uploader :passport_image, PassportImageUploader end

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

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

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

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

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

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

guest

回答2

0

「showを表示する際にURLを入力しているタイミングでpassport_controllerのnewが処理され、」
がどういう状況を説明しているのか理解できません。

正しい答えを得るには正しい質問が必要です

1)どこにURLを入力しているのでしょう?
1−1)ブラウザーのURLエリア?
1-2)作成したアプリの中に設けたURLエリア?

2)newが処理され というのは
2-1) newが実行されるようにプログラムしてある?
2-2) プログラムしているつもりな無いのに、newが走る?

3)そのタイミングは
3-1) URL入力中に処理が走る?
3-2) URL入力してサーバーに送ると?

想像をたくましくすると、1-1, 2-2, 3-2
routeの問題の様な気がする。config/routes.rbを載せてください

投稿2020/03/29 21:17

winterboum

総合スコア23284

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

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

0

#毎回パスポートデータが消される。

すでにデータがあるときにnewする必要はありません。データがあるかチェックして、すでにあればshowにリダイレクトさせる、などの措置を行いましょう。

投稿2020/03/29 09:14

maisumakun

総合スコア145121

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問