2016-11-25 6 views
1

Может кто-нибудь помочь мне с этой ошибкой?Нет совпадений в маршруте [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 %> 

ответ

2

Ваша форма оказывает неправильный URL

new_collection_photo_path

Это должно быть

collection_photos_path

+0

Исправлена ​​ошибка. Но по какой-то причине я получаю следующую ошибку в моем 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

+0

@royketelaar Извините, что не смог понять в этом формате, вы можете задать новый вопрос, так как это новая ошибка. –

+0

Да, это довольно сложно отформатировать комментарий, я сделаю новый вопрос – royketelaar

Смежные вопросы