2016-07-24 2 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 метода.

Update:

# 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 

Update я получаю новую ошибку Теперь

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

Первая линия вида маркируется.

+0

где ваш 'routes.rb' код? – Emu

+0

@Emu Я обновил вопрос. – Nikola

+0

также добавьте ссылку, которую вы используете, чтобы создать новую фотографию –

ответ

1

изменить ваш form_for в _form неравнодушен к

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

Спасибо! Как я не понимаю, я этого даже не заметил. – Nikola

+1

, а также способ, которым вы вызываете методы find_user и find_photo в контроллере, неверно использует фильтры before_action –

+0

, когда я добавляю его перед действием 'before_action: find_user,: find_photo', я получаю эту ошибку:' Не удалось найти Photo with ' id '= ' – Nikola

0

Как вы называете/users/4/photos/new в вашем представлении? В идеале вы должны передать user_id как id, а не user_id. После этого вы должны решить эту проблему.

+0

Мне нужно передать user_id в диспетчере фотографий, потому что id является reserver для идентификатора фотографии. user_id - это ссылка на пользователя. В новом представлении я представляю эту форму. – Nikola

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