Ruby on Railsでform_withでモデルを複数渡したいんですが、エラーが出ます。
解決したいこと
Ruby on Railsで投稿にコメントをする機能を実装しているのですが、form_withで複数のモデルを渡したいんですがエラーが出ます。
発生している問題・エラー
ActionView::Template::Error (undefined method `answer_photo_path' for #<#<Class:0x00007fa1981102b0>:0x00007fa1980b71d8>
Did you mean? new_photo_path):
該当するソースコード
routes.rb
Rails.application.routes.draw do
resources :photos
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
root to: 'toppages#index'
get 'login', to: 'sessions#new'
post 'login', to: 'sessions#create'
delete 'logout', to: 'sessions#destroy'
get 'signup', to: 'users#new'
resources :users, only: [:index, :show, :create]
resources :photos
resources :answers, only: [:create]
end
photos_controller.rb
class PhotosController < ApplicationController
before_action :set_photo, only: %i[ show edit update destroy ]
def index
@photos = Photo.all
end
def show
@answer = Answer.new
@photo = Photo.find(params[:id])
@answers = @photo.answers
end
def new
@photo = Photo.new
end
def edit
end
def create
@photo = current_user.photos.new(photo_params)
if @photo.save
flash[:success] = '投稿に成功しました。'
redirect_to photos_path
else
flash.now[:danger] = "投稿に失敗しました。"
render :new
end
end
def update
respond_to do |format|
if @photo.update(photo_params)
format.html { redirect_to @photo, notice: "Photo was successfully updated." }
format.json { render :show, status: :ok, location: @photo }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @photo.errors, status: :unprocessable_entity }
end
end
end
def destroy
@photo.destroy
respond_to do |format|
format.html { redirect_to photos_url, notice: "Photo was successfully destroyed." }
format.json { head :no_content }
end
end
private
def set_photo
@photo = Photo.find(params[:id])
end
def photo_params
params.require(:photo).permit(:image, :content)
end
end
answers_controller.rb
class AnswersController < ApplicationController
def create
@photo = Photo.find(params[:photo_id])
@answer = @photo.answer.new(answer_params)
if @answer.save
redirect_to photo_path(@photo)
else
flash.now[:alert] = 'コメント入力してください。'
end
end
private
def answer_params
params.require(:answer).permit(:content, :photo_id)
end
end
photos/show.html.erb
<p id="notice"><%= notice %></p>
<div class="row">
<div class="offset-md-3 col-md-5">
<p>
<%= image_tag @photo.image.url if @photo.image? %>
</p>
<p>
<strong>クイズの問題:</strong>
<%= @photo.content %>
</p>
<p>
<%= form_with(model:[@answer, @photo], method: :post) do |f| %>
<div class="form-group">
<%= f.text_area :content, class: 'form-control', rows: 5 %>
</div>
<%= f.submit 'Post', class: 'btn btn-primary btn-block' %>
<% end %>
</p>
</div>
</div>
<%= link_to '戻る', photos_path %> |
<%= link_to '編集', edit_photo_path(@photo) %>
自分で試したこと
モデルの指定をモデルのインスタンスではなくurlで指定などしてみたんですが、うまくいきません。
足りないコードがあれば載せます。ご教授お願いします。
0