2012-10-03 10 views
3

안녕하세요. 현재 중첩 된 리소스로 작업하고 있습니다.레일즈 : 정의되지 않은 메소드`photos_path '?

루트

Pholder::Application.routes.draw do 
resources :users do 
    resources :albums do 
    resources :photos 
    end 
end 
end 

내가 3 모델 (사용자, 앨범, 사진)가 있습니다. 나는 사용자를 등록하고 앨범을 만들 수 있었지만 사진에 대한 양식을 만들려고 애 쓰고 있습니다. 당신이 볼 수있는 페이지의 하단에 거기에 새로운 사진에 대한 경로, 그리고

앨범/쇼

<% if @album.photos.any? %> 
yes pics 
<% else %> 
no pics 
<% end %> 


<%= link_to "Upload new pics!", new_user_album_photo_path(@user, @album) %> 

: 앨범의 생성에, 사용자는 앨범/쇼 페이지로 리디렉션됩니다 문제가있는 곳입니다. # < #에 대한

undefined method photos_path ': I이 링크를 클릭하면, 그것은 나에게 오류를 제공 0x007fb69e167220>`

오류가 해당 페이지의 라인 # 3에서 발생합니다 (사진/신규)

<% provide(:title, "Upload pictures") %> 

<%= form_for(@photo, :html => { :multipart => true }) do |f| %> 

<%= f.file_field :photo %> 

<% end %> 

내가 컨트롤러 (난 아직도 컨트롤러에 어떤 내용이 매우 불안정 해요.)에 잘못된 정보를 가하고있어 의심의 새로운

사진 /? 여기 내 사진 컨트롤러가 있습니다.

class PhotosController < ApplicationController 

    def new 
     @user = User.find(params[:user_id]) 
     @album = @user.albums.find(params[:album_id]) 
     @photo = @album.photos.build 
    end 

    def create 
     @album = Album.find(params[:album_id]) 
     @photo = @album.photos.build(params[:photo]) 
     respond_to do |format| 
     if @album.save 
      format.html { redirect_to @album, notice: 'Album was successfully created.' } 
      format.json { render json: @album, status: :created, location: @album} 
     else 
      format.html { render action: "new" } 
      format.json { render json: @album.errors, status: :unprocessable_entity } 
     end 
     end 
    end 

    def show 
     @album = Album.find(params[:album_id]) 
     @photos = @album.photos 
    end 


end 

은 내 양식이 잘못된

사진 컨트롤러? 컨트롤러에 넣을 내용과 폼이나 컨트롤러에서 오류가 발생하는지 여부는 혼란 스럽습니다. 감사합니다.

더 자세한 정보가 필요하면 알려주세요.

답변

5

link_to 도우미에게 부모 리소스를 제공하는 것과 같은 방법으로도 양식에 제공해야합니다. 양식 줄을 다음과 같이 변경하십시오.

<%= form_for([@user, @album, @photo], :html => { :multipart => true }) do |f| %> 

.. 작동해야합니다.

+0

완벽한 !!! 고마워. 중첩 된 리소스의 경우 양식을 만들 때 부모 (?) 리소스의 양식과 대상 리소스의 양식을 만들어야합니다. – Edmund

2

그래서 레일스는 양식 도우미로 전달한 개체를 약간의 반사를 사용하여 (나는 추측하고있다) 단순한 사진 개체로 사용하고 있습니다. 레일스는 기본적으로 photos_path을 찾아서 POST 요청이 일반적으로 액션으로 이동하는 곳을 찾습니다. 따라서 /photos에 게시 중입니다. 불행히도 현재 경로에 따라 존재하지 않습니다.

는 해당 양식 도우미 라인을 변경하는 경우 : /사용자/(사용자 ID)에 게시 할 원인이

<%= form_for [@user,@album,@photo], html: { multipart: true} do |f| %> 

/앨범/(앨범 ID를)/사진는 새로운 사진을 작성해야하는 .

+0

좋은 설명. 이제 이해가된다! – Edmund

관련 문제