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

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

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

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

337閲覧

railsでcreateメソッドが効かない

taniyan512

総合スコア2

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2022/10/02 00:59

前提

railsでuserごとに動画(youtubeの動画のurl)を保存したいのでmovieモデルを作成しています。
親 userモデル
子 movieモデル

実現したいこと

movieモデルにcreateメソッドでmovie_urlのカラムを保存したいができない

発生している問題・エラーメッセージ

form_withでcreateメソッドに値を送信していると思われるが保存できておらず、また指定したredirect先に遷移しない。

該当のソースコード

movies_controller

1class MoviesController < ApplicationController 2 def new 3 @movie = Movie.new 4 end 5 6 def create 7 @movie = Movie.create(movie_params) 8 url = params[:movie][:movie_url] 9 url = url.last(11) 10 @movie.movie_url = url 11 if @movie.save 12 redirect_to '/' 13 else 14 render 'new' 15 end 16 end 17 18 private 19 def movie_params 20 params.require(:movie).permit(:movie_url).merge(user_id: current_user) 21 end 22end 23

new.html.erb

1<div class="profile"> 2 <div class="profile-form"> 3 <div class="text-center"> 4 <h4>アピールしたい動画を貼ろう</h4> 5 </div> 6 <div class="profile-container"> 7 <%= form_with url: create_movies_path, local: true do |f| %> 8 <table> 9 <tr> 10 <th><%= f.label :movie_url ,"自己PR動画(見てほしいyoutubeのurl)", class: "form-label" %></th> 11 <td><%= f.text_field :movie_url, class: "mb-3 form-control" %></td> 12 </tr> 13 </table> 14 <ul class="mb-3 form-check"> 15 <li><%= f.submit "作成", class: "btn btn-primary"%></li> 16 </ul> 17 <% end %> 18 </div> 19 </div> 20</div> 21

routes.rb

1Rails.application.routes.draw do 2 get 'services/new' 3 devise_for :users, controllers: { 4 registrations: 'users/registrations' 5 } 6 7 get '/' => 'home#top' 8 get 'home/profile' => 'home#profile', as: :profile_home 9 post 'home/profile' => 'home#update', as: :update_home 10 get 'home/:id' => 'home#show',as: :show_home 11 12 resources :services 13 post 'services' => 'services#create', as: :create_service 14 15 resources :movies 16 post 'movies' => 'movies#create', as: :create_movies 17end 18

試したこと

ルーティングをresoucesを使わずに指定したが結果はかわらず。
他に何がおかしいのかがわからないため質問させていただきます。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

form_withでcreateメソッドに値を送信していると思われるが保存できておらず

まずは、どちらが動いていないかを確認してみましょう。「ブラウザでリクエストの状態を探る」「create内でraiseを仕掛けて、その地点を通るかを確認する」など、いくつか方法はあります。

投稿2022/10/02 23:41

maisumakun

総合スコア145183

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

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

taniyan512

2022/10/03 12:40

ご回答ありがとうございます。 まずmovies.controller.rbのcreateメソッドの一番上にraise RuntimeErrorを仕掛けたところ、エラー画面が表示されました。この時点でcreateメソッドは通っていることが分かりました。 次に@movie = Movie.new(movie_params)の下に再度raise RuntaimErrorを仕掛けたところ、エラー画面は表示されませんでした。よって@movie = Movie.new(movie_params)に何か不備があるのかと思い確認しました。 Q movie_paramsメソッドの記述に間違いはないか? A 記述ミスは無さそう。 何か他に考えられる点ありますでしょうか?
maisumakun

2022/10/03 12:49

createをcreate!に書き換えると、失敗した時に例外を投げるようになります。それで例外が起きるのか、そして例外の内容を確認してみるのもありです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問