2015-03-07 3 views
0

Так что я просто сделал один из своих объектов вложенным ресурсом моего пользовательского объекта. Теперь все мои ссылки не работают, и мой индекс не будет отображаться. Я получаю сообщение об ошибке:ReNesting Resource Routes in Rails

/views/photos/index.html.haml where line #8 raised:

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

с этой линии бытия, где его найти вопрос:

= link_to photo.title, user_photo_path(@user, @photos) 

Это мой контроллер для моих фотографий объекта:

class PhotosController < ApplicationController 
before_action :find_photo, only: [:show, :edit, :update, :destroy, :upvote, :downvote] 
before_action :authenticate_user!, except: [:index, :show] 

def index 
    @photos = Photo.all.order(:cached_weighted_score => :desc) 
end 

def show 
@comments = Comment.where(photo_id: @photo) 
@photo = Photo.find(params[:id]) 
end 

Мои маршруты выглядеть это:

Rails.application.routes.draw do 
devise_for :users 
root 'photos#index' 
resources :users do 
resources :photos do 
    member do 
     get "like", to: "photos#upvote" 
     get "unlike", to: "photos#downvote" 
    end 
    resources :comments 
    end 
end 
end 

Это мой контроллер пользователя:

class UsersController < ApplicationController 

def show 
    @user = User.find_by(params[:id]) 
    @photos= @user.photos.order(:cached_weighted_score => :desc) 
end 
end 

наконец вид, который генерирует код ошибки:

.container 
    .row 
    .col-lg-12 
     %h1.page-header Most Popular Photos 
    - @photos.each do |photo| 
     .thumbnail.col-lg-3.col-md-4.col-xs-6.thumb 
     %h2 
      = link_to photo.title, user_photo_path(@user, @photo) 
      = link_to (image_tag photo.image.url(:small)), photo 
     %p 
      = photo.get_likes.size 
      Likes 
    = link_to "Add New Photo", new_photo_path 

Любая помощь приветствуется. Мое последнее изменение заключалось в добавлении маршрута фотографий ниже пользовательского маршрута.

ответ

0

второй аргумент должен быть экземпляр фотографии из цикла не @photo, который, вероятно, NIL:

= link_to photo.title, user_photo_path(@user, photo)

UPDATE 1: Кроме того, необходимо загрузить @user в PhotosController # шоу:

@user = User.find_by(params[:user_id]) 
+0

Он предназначен для ссылки на действие шоу для одной из фотографий пользователей, а не для всех пользователей. – ChiefRockaChris

+0

Сначала попробуйте не правильно. См. Последние. – steakchaser

+0

Спасибо за помощь! Поэтому я только что внедрил последний ответ, а теперь вместо двух ключей: id &: user_id. В нем говорится, что отсутствует одно: «Нет маршрутов, совпадающих с: {: action =>" show ",: controller =>" photos ",: id =>" 4 ",: user_id => nil} Отсутствующие ключи: [: user_id] '. Мы приближаемся – ChiefRockaChris

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

  • Нет связанных вопросов^_^