2016-11-25 77 views
1

作爲後續行動,以this較早前的問題,已經解決了未定義的方法錯誤

我與一個Rails應用程序在那裏我可以創建集合一個開始。每個系列都可以有多個照片。我現在可以創建這些集合和照片。但每當我試圖訪問/收藏/ 1 /照片它有一個問題,此行我的照片索引

undefined method `photo_path' for #<#<Class:0x007fb8c40f1b38>:0x007fb8c88673a0> 

<td><%= link_to 'Show', photo %></td> 

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 

的routes.rb

Rails.application.routes.draw do 
    resources :collections do 
    resources :photos 
    end 
end 

/photos/index.html

<p id="notice"><%= notice %></p> 

<h1>Photos</h1> 

<table> 
    <thead> 
    <tr> 
     <th colspan="3"></th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @photos.each do |photo| %> 
     <tr> 
     <td><%= photo.name %></td> 
     <td><%= link_to 'Show', photo %></td> 
     <td><%= link_to 'Edit', edit_photo_path(photo) %></td> 
     <td><%= link_to 'Destroy', photo, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 

<br> 

<%= link_to 'New Photo', new_collection_photo_path %> 

collection.rb

class Collection < ApplicationRecord 
    has_many :photos 
end 

photo.rb

class Photo < ApplicationRecord 
    belongs_to :collection 
end 

我使用Rails的5.0.0.1和Ruby 2.3.0

+0

運行'耙routes'。似乎正確的路徑將是:'collection_photos_path' –

回答

1

使用該你的節目並刪除鏈接路徑是錯誤的

<td><%= link_to 'Show', collection_photo_path(@collection, photo) %></td> 
<td><%= link_to 'Edit', edit_collection_photo_path(@collection, photo) %></td> 
<td><%= link_to 'Destroy', 
collection_photo_path(@collection, photo), method: :delete, data: { confirm: 'Are you sure?' } %></td> 

鏈接應該做這個,從控制器應intialize @collection

def index 
    @collction = Collection.find(params[:collection_id]) 
    @photos = @collction.photos 
end 
+0

非常感謝!我已經有一種感覺,我在我的控制器中失去了一些東西。 – royketelaar

+0

@royketelaar幹得好!繼續 –