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

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

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

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

Q&A

1回答

2043閲覧

ActionController::UrlGenerationError

gaijin

総合スコア30

Ruby on Rails

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

0グッド

0クリップ

投稿2019/04/24 23:32

編集2019/04/25 22:20

Ruby on Rails初心者です。
独学で学んでおります。
色々と試しているのですが、どこが問題なのかわからず苦戦しています。
ネストしていますがpathはあっていると思います。
どうか詳しい方ご教授いただけると助かります。

error

1ActionController::UrlGenerationError in TrucksController#create 2 3No route matches {:action=>"show", :artist_id=>#<Truck id: 6, title: "foge", created_at: "2019-04-24 23:09:12", updated_at: "2019-04-24 23:09:12">, :controller=>"trucks", :id=>nil} missing required keys: [:id]

rails

1class TrucksController < ApplicationController 2 def show 3 4 end 5 def new 6 end 7 8 def create 9 @truck = Truck.new(truck_params) 10 @truck.save 11 12 **redirect_to artist_truck_path(@truck) 13 end** 14 15 def truck_params 16 params.require(:truck).permit(:title) 17 end 18end

terminal

1artist_trucks GET /artists/:artist_id/trucks(.:format) trucks#index 2 POST /artists/:artist_id/trucks(.:format) trucks#create 3 new_artist_truck GET /artists/:artist_id/trucks/new(.:format) trucks#new 4 edit_artist_truck GET /artists/:artist_id/trucks/:id/edit(.:format) trucks#edit 5 artist_truck GET /artists/:artist_id/trucks/:id(.:format) trucks#show 6 PATCH /artists/:artist_id/trucks/:id(.:format) trucks#update 7 PUT /artists/:artist_id/trucks/:id(.:format) trucks#update 8 DELETE /artists/:artist_id/trucks/:id(.:format) trucks#destroy

追記

redirect_to artist_truck_path(@artist, @truck)

ActionController::UrlGenerationError in TrucksController#create No route matches {:action=>"show", :artist_id=>nil, :controller=>"trucks", :id=>"24"} missing required keys: [:artist_id]

redirect_to artist_truck_path(artist_id, @truck)

NameError in TrucksController#create undefined local variable or method `artist_id' for #<TrucksController:0x00000001cf1cb8> Did you mean? artist_index_url artist_index_path artist_url

再追記
new.html.erb

<h1>Add Truck</h1> <%= form_for (@artist, @truck]) do |f| %> <%= hidden_field_tag "artist_id", @truck.truck_id %> <%= f.text_field :title %><br> <%= f.submit %> <% end %>

trucks_controller.rb

class TrucksController < ApplicationController def show @truck = Truck.find params[:id] end def new end def create @truck = Truck.new(truck_params) @truck.save redirect_to artist_truck_path(artist_id, @truck) end def truck_params params.require(:truck).permit(:title) end end

routes.rb

get 'artist/index' resources :artists do resources :comments resources :trucks end root 'artist#index'

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

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

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

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

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

guest

回答1

0

artist_truck_path に artist_id を渡していないのが原因です。

artist_truck_path(@artist, @truck)artist_truck_path(artist_id, @truck) のように渡すと直ると思います。

投稿2019/04/25 03:39

編集2019/04/25 03:40
iwamot

総合スコア1154

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

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

gaijin

2019/04/25 13:50

返信ありがとうございます。 今帰宅し実行したところやはりエラーが出てしまいました。。 一度追記いたしますので見ていただきたいのですが。。 本当に申し訳ありません。。
iwamot

2019/04/25 13:53

いえいえ、お気になさらず。
iwamot

2019/04/25 14:21 編集

TrucksController の create メソッドの中で、artist_id をどうにかして入手し、artist_truck_path(artist_id, @truck) とするのがベストだと思います。 入手方法は、送信元画面からどのように渡しているかによって異なります。 もし渡していないのであれば、あるアーティストに対して曲を追加するアクションなので、渡さないといけないでしょう。
gaijin

2019/04/25 14:38

丁寧にありがとうございます。 今試行錯誤しながら試しています。 また、報告させていただきます! 本当にありがとうございます!
gaijin

2019/04/25 15:54

なんども申し訳ございません、具体的にはどのようにしていけばよいでしょうか? 調べて試せることは試しているのですが一向にエラーが消えず本当に気持ちが折れそうです。。
iwamot

2019/04/25 16:19

曲の作成画面(new_artist_truck)はエラーなく開けているんですよね。だとしたら、そのビューテンプレートにartist_idを渡し、曲の作成フォームにhiddenで含めるのが手っ取り早いんじゃないでしょうか。 ちなみに、リダイレクトの前に、曲のデータは正しく登録されているのでしょうか。曲のデータにはartist_idが含まれますよね?
gaijin

2019/04/25 22:13

おはようございます。はい、曲の作成画面は開けておりますが、データの登録をsubmitしようとするとこのエラーが出ます。。 お忙しいところお付き合いいただき本当にありがとうございます。。 該当のコード追記しておきます、ご確認いただけたら幸いです。
iwamot

2019/04/25 23:40 編集

trucks テーブルの構造(id, title の他にどんな列が存在するか)が知りたいです。 現段階では、それぞれ下記のように直すとうまくいきそうな気がします。 <%= hidden_field_tag "artist_id", @artist.id %> redirect_to artist_truck_path(params[:artist_id], @truck) params.require(:truck).permit(:title, :artist_id)
gaijin

2019/04/26 01:26

早急な返信返信ありがとうございます。 こちらのコードで試してみたところエラーが返ってきてしまいました。 お恥ずかしい質問なんですがよろしいでしょうか? 列とはどの部分を指すのでしょうか。。
iwamot

2019/04/26 03:26

うーん、テーブルの「列」とは何かがわからない状態であれば、データベースの基礎を勉強なさったほうがよいと思います。 意地悪したいわけではないのですが、いまの段階でRailsアプリを作ろうとするのは早い気がします。なんらかのチュートリアルから始めることを(もう済んでいるのであれば復習を)おすすめします。
gaijin

2019/04/27 06:26

いえとんでもないです。 今回ご教授いただけ本当にありがとうございます。  もう一度復習からやり直そうと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問