Может кто-нибудь помочь мне с этой ошибкой?Нет совпадений в маршруте [POST] "/ collections/1/photos/new"
Я только что начал основной проект Rails, где у меня есть Коллекции. Каждая коллекция может иметь несколько Фотографии.
Однако, я могу создать эти Коллекции. Но whenenver я хочу создать фото, прикрепленные к коллекции я получаю эту ошибку:
No route matches [POST] "/collections/1/photos/new"
routes.rb
Rails.application.routes.draw do
resources :collections do
resources :photos
end
end
collection_controller.rb
class CollectionsController < ApplicationController
before_action :set_collection, only: [:show, :edit, :update, :destroy]
# GET /collections
# GET /collections.json
def index
@collections = Collection.all
end
# GET /collections/1
# GET /collections/1.json
def show
end
# GET /collections/new
def new
@collection = Collection.new
end
# GET /collections/1/edit
def edit
end
# POST /collections
# POST /collections.json
def create
@collection = Collection.new(collection_params)
respond_to do |format|
if @collection.save
format.html { redirect_to @collection, notice: 'Collection was successfully created.' }
format.json { render :show, status: :created, location: @collection }
else
format.html { render :new }
format.json { render json: @collection.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /collections/1
# PATCH/PUT /collections/1.json
def update
respond_to do |format|
if @collection.update(collection_params)
format.html { redirect_to @collection, notice: 'Collection was successfully updated.' }
format.json { render :show, status: :ok, location: @collection }
else
format.html { render :edit }
format.json { render json: @collection.errors, status: :unprocessable_entity }
end
end
end
# DELETE /collections/1
# DELETE /collections/1.json
def destroy
@collection.destroy
respond_to do |format|
format.html { redirect_to collections_url, notice: 'Collection was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_collection
@collection = Collection.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def collection_params
params.require(:collection).permit(:name, :description)
end
end
photos_controller.rb
class PhotosController < ApplicationController
before_action :set_photo, only: [:show, :edit, :update, :destroy]
# GET /photos
# GET /photos.json
def index
@photos = Photo.all
end
# GET /photos/1
# GET /photos/1.json
def show
end
# GET /photos/new
def new
@photo = Photo.new
end
# GET /photos/1/edit
def edit
end
# POST /photos
# POST /photos.json
def create
@photo = Photo.new(photo_params)
respond_to do |format|
if @photo.save
redirect_to @photo
format.html { redirect_to @photo, notice: 'Photo was successfully created.' }
format.json { render :show, status: :created, location: @photo }
else
format.html { render :new }
format.json { render json: @photo.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /photos/1
# PATCH/PUT /photos/1.json
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 }
format.json { render json: @photo.errors, status: :unprocessable_entity }
end
end
end
# DELETE /photos/1
# DELETE /photos/1.json
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
# Use callbacks to share common setup or constraints between actions.
def set_photo
@photo = Photo.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def photo_params
params.require(:photo).permit(:name, :collection_id)
end
end
фотографий/new.html.erb
<h1>New Photo</h1>
<%= render 'form', photo: @photo %>
<%= link_to 'Back', collection_photos_path %>
фото/_form.html.erb
<%= form_for [@collection, @photo], url: new_collection_photo_path do |f| %>
<% if photo.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(photo.errors.count, "error") %> prohibited this photo from being saved:</h2>
<ul>
<% photo.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>Naam:</p>
<%= f.text_field :name %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Исправлена ошибка. Но по какой-то причине я получаю следующую ошибку в моем photo_controller: undefined method 'photo_url 'для # Вы имели в виду? photo_params Извлеченный источник (вокруг строки # 31): reply_to do | формат | if @ photo.save redirect_to @photo format.html {redirect_to @photo, notice: 'Фотография была успешно создана.' } format.json {render: show, status: created, location: @photo} else –
royketelaar
@royketelaar Извините, что не смог понять в этом формате, вы можете задать новый вопрос, так как это новая ошибка. –
Да, это довольно сложно отформатировать комментарий, я сделаю новый вопрос – royketelaar