前提・実現したいこと
rails初心者です。楽曲とその音源を登録するアプリを作っています。1つの曲に対し複数の演奏音源がつきます。親モデルはpostで、子モデルはrecordingです。
楽曲を表示するページ(post#show)から
その楽曲の音源を新規登録するフォーム(recording#new)に飛びますが、
その際に、親モデルである楽曲に属するデータを取得したいと思っています。
発生している問題・エラーメッセージ
しかし、どの曲のページの新規登録ページに飛んでも、フォームに特定の曲(id=1)のデータが渡ってしまいます。その曲のIDが2だろうが3だろうが変わりません。
これを見る限り、6行目で["id", 1]となっているのが原因だと思うのですが、どうすれば正しいidとそのデータを渡せるでしょうか。
Started GET "/posts/21/recordings/new" for ::1 at 2019-10-17 20:02:29 +0500 Processing by RecordingsController#new as HTML Parameters: {"post_id"=>"21"} Recording Load (0.4ms) SELECT "recordings".* FROM "recordings" WHERE (21) LIMIT ? [["LIMIT", 1]] ↳ app/controllers/recordings_controller.rb:8:in `new' Rendering recordings/new.html.erb within layouts/application Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/views/recordings/new.html.erb:4 Rendered recordings/new.html.erb within layouts/application (Duration: 7.1ms | Allocations: 12317) Completed 200 OK in 54ms (Views: 51.0ms | ActiveRecord: 0.6ms | Allocations: 22021)
該当のソースコード
モデル
Post.rbclass Post < ApplicationRecord has_many :recordings accepts_nested_attributes_for :recordings end Recording.rbclass Recording < ApplicationRecord belongs_to :post end
コントローラの抜粋
PostController def show @post = Post.find(params[:id]) @recordings = @post.recordings end RecordingContoroller def new @recording = Recording.find(params[:post_id]) end
ルート
Rails.application.routes.draw do resources :posts do resources :recordings collection do get :'index' end member do get :edit end end end
ビューの抜粋
post#show <%= link_to "New Recording", new_post_recording_path(@post) %> recording#new <%= form_with url: post_recordings_path do |f| %> <%= f.label :composer %> <%= f.text_field :composer, value: @recording.post.composer %><br> 以下略
以下は親子モデルの抜粋です。外部キーはpost_idです。子モデルのデータには外部キーが入っています。
"posts" ( "id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "composer" text, "title" text, ); "recordings" ( "id" integer NOT NULL PRIMARY KEY, "composer" varchar DEFAULT NULL, "title" varchar DEFAULT NULL, "performer"varchar DEFAULT NULL, "conductor" varchar DEFAULT NULL, "orchestra" varchar DEFAULT NULL, "post_id" integer DEFAULT NULL, CONSTRAINT "fk_rails_47949a0700" FOREIGN KEY (" post _id") REFERENCES " post" ("id") );
試したこと
元来、親モデルのデータの取得すらできず、それに関してgoogleでstakoverflowやteratailを調べていました。recordingコントローラの書き方を修正して、取得そのものは解決したいのですが、今回の問題に行き着きました。
補足情報(FW/ツールのバージョンなど)
Ruby on Rails 6.0.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/19 03:16