2016-07-24 3 views
0

입니다. 사진 모델에 속한 사진 모델입니다. 반환 내가 /users/4/photos/new 새로운보기에 액세스하려고 할 때마다이 오류를 레일 :필수 키가 누락되었습니다 : 새로운 사진 양식의 ID는

No route matches {:action=>"index", :controller=>"photos", :user_id=>"4"} missing required keys: [:id] 

이 내 PhotosController입니다 :

class PhotosController < ApplicationController 
    def index 
     find_user 
     @photos = @user.photos 
    end 

    def new 
     find_user 
     @photo = @user.photos.build 
    end 

    def show 
     find_photo 
    end 

    def create 
     @photo = Photo.new(params[:photo]) 

     if @photo.save 

      if params[:images] 
       params[:images].each { |image| 
        @user.photos.create(image: image) 
       } 
      end 

     else 
      render 'new' 
     end 
    end 

    def update 
     find_user 
     @photo = @user.photos.find(params[:id]) 

     if @photo.update 
      redirect_to photos_path 
     else 
      render 'edit' 
     end 
    end 

    def destroy 
     find_photo 
     @photo.destroy 

     redirect_to photos_path 
    end 

    private 

    def find_user 
     @user = User.find(params[:user_id]) 
    end 

    def find_photo 
     @photo = Photo.find(params[:id]) 
    end 

    def photo_params 
     require(:photo).permit(:title, :image, :user_id) 
    end 
end 

그리고이 사진의 전망에 대한 부분 내 _form입니다.

<%= form_for @photo, :html => { class: 'form-horizontal', multipart: true } do |f| %> 
<%= f.label :title %> 
<%= f.text_field :title, class: "input-field form-control" %> 

<%= f.label :pictures %> 
<%= file_field_tag "images[]", type: :file, multiplue: true %> 

<%= f.submit nil, class: "btn btn-primary" %> 

내가 ID 내가 find_user를 방법을 통해 제공하고있어,없는 방법을 이해하지 않습니다.

업데이트 :

# routes.rb 
Rails.application.routes.draw do 

    root 'welcome#index' 

    # prevedene rute 
    get "/pocetna"   => "welcome#index", as: "index" 
    get "/o-sajtu"   => "welcome#about", as: "about" 
    get "/moj-profil"  => "users#show", as: "profile" 
    post "/users"   => "users#create" 
    get "/users"   => "users#index", as: "users" 
    get "/user"   => "users#index" 
    get "https://stackoverflow.com/users/:id"  => "users#show", as: "user" 
    get "https://stackoverflow.com/users/:id/edit" => "users#edit", as: "edit_user" 
    patch "https://stackoverflow.com/users/:id"  => "users#update" 
    get "https://stackoverflow.com/users/add" => "users#new", as: "new_user" 

    resources :sessions, only: [:new, :create, :destroy] 

    get "/login" => "sessions#new", as: "login" 
    post "/login" => "sessions#create" 
    get "/logout" => "sessions#destroy", as: "logout" 
    delete "/logout" => "sessions#destroy" 

    resources :users do 
    resources :photos 
    end 
end 

업데이트 나는 새로운 오류가 지금 형태의

undefined method `photos_path' for #<<Class:0x007f4f14f16160>:0x00000004f040e8> 

첫 번째 줄이 표시됩니다.

+0

에 부분 _form에 form_for는 어디에'routes.rb' 코드? – Emu

+0

@Emu 질문을 업데이트했습니다. – Nikola

+0

또한 새 사진을 만들 때 사용하는 링크를 추가하십시오. –

답변

1

변화는

form_for([@user, @photo]) do |f| 
#rest of your code 
end 
+0

고마워요! 내가 얼마나 바보인지, 나는 그 사실을 눈치 채지 못했다. – Nikola

+1

그리고 당신의 메소드를 호출하는 방법 또한 컨트롤러의 find_user와 find_photo가 올바른 사용법이 아닙니다 before_action filters –

+0

'before_action : find_user : : find_photo' 액션 전에 추가 할 때이 오류가 발생합니다 :'Could not Photo with ' id : = ' – Nikola

0

보기에서/users/4/photos/new를 어떻게 부르십니까? 이상적으로 user_id를 user_id가 아닌 id로 전달해야합니다. 한 번,이 문제를 해결해야합니다.

+0

ID가 사진 ID에 대한 예약자이기 때문에 포토 컨트롤러에서 user_id를 전달해야합니다. user_id는 사용자를 참조합니다. 새로운 시각에서 저는 그 형태를 표현하고 있습니다. – Nikola

관련 문제