Railsのform_withメソッドで、ネストしたパスを扱う場合の質問です。
現在、以下のようにform_withを使用しております。
<%= form_with(model: [@post, @progress], local: true) do |f| %> <%= render 'shared/error_messages', object: f.object %> <div class="field"> <%= f.text_area :content, class: 'form-control', id: 'progress_content', placeholder: 'その後はいかがですか?' %> </div> <%= f.submit yield(:button_text), class: 'btn btn-primary' %> <% end %>
フォームの内容を入力して投稿ボタンを押した場合は、エラーが出ることなくデータが登録されるのですが、何も入力せずに投稿ボタンを押した場合に、以下のようなエラーが出力されます。
上記のビューも後述するコントローラも、それぞれほぼ同じ書き方で同じことを実現しているコードが別に存在しています。しかし、そちらでは何も入力せずに投稿ボタンを押してもエラーは出力されません。
そのため、ネストの書き方等に何か問題があるのではないかと思っております。
こちらは上記ビューに対応するコントローラの記述です。
def new @post = Post.find_by(id: params[:post_id]) @progress = Progress.new end def create post = Post.find_by(id: params[:post_id]) @progress = post.progresses.new(progress_params) if @progress.save flash[:success] = '進捗を記録しました' redirect_to posts_url else render 'new' end end
もし解決につながりそうな知見をお持ちの方がいらっしゃれば、お声がけいただけると幸いです。
よろしくお願いいたします。
【追記】
追加依頼をいただいたため、routes.rbも掲載します。
Rails.application.routes.draw do root to: 'home#top' get '/signup', to: 'users#new' get '/posts/search', to: 'posts#search' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :users resources :posts do resources :likes, only: [:create, :destroy] resources :progresses, only: [:new, :create, :show, :edit, :update, :destroy] end resources :notifications, only: [:index] end
回答1件
あなたの回答
tips
プレビュー