Как сделать ссылку на страницу в отношениях «один ко многим»?

Я использую скрепку и рельсы. Я следовал этому руководству: Загрузка нескольких файлов с помощью Paperclip и Rails 3 (скринкаст)

У меня есть галерейная модель, в которой много галерейных фотографий.

Вместо ссылки на исходное изображение, на мой взгляд, я создал метод show в фотоизображении, но получаю следующую ошибку:

undefined method `galleryphoto_path' for #<#<Class:0x007f40a0000c20>:0x00000005385d60>

Вот мой код:

<% for asset in gallery.galleryphotos %>
  <%= link_to image_tag(asset.photo.url(:thumb)), url_for(asset) %>
<% end %>

Вот мой контроллер фотогалереи:

class GalleryphotosController < ApplicationController
  load_and_authorize_resource

  def show
    @gallery = Gallery.find(params[:gallery_id])
    @galleyphoto = @gallery.galleyphotos.find(params[:id])


    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @gallery }
    end
  end
 end

Вот мои маршруты для них:

  resources :galleries do
    resources :galleryphotos
  end

Любые идеи, как это исправить?


person bigdaveyl    schedule 06.07.2012    source источник
comment
Так есть ли метод show в PhotoImagesController? (но модель называется Galleryphoto)? Хочу убедиться, что у меня есть на это право.   -  person Jesse Wolgamott    schedule 06.07.2012
comment
@JesseWolgamott - да, правильно. Мой контроллер — GalleyphotosController.   -  person bigdaveyl    schedule 06.07.2012
comment
это представлено в вашем файле route.rb?   -  person Rabbott    schedule 06.07.2012
comment
@JesseWolgamott — добавлен код мю-контроллера   -  person bigdaveyl    schedule 06.07.2012
comment
@Rabbott - Да, посмотрите код маршрутов, который я добавил   -  person bigdaveyl    schedule 06.07.2012
comment
@bigdaveyl, пожалуйста, отметьте ответ как правильный, если он правильный :)   -  person Draiken    schedule 06.07.2012


Ответы (1)


Помощник url_for не найдет маршрут для модели Galleryphoto, поскольку он зависит от модели Gallery. Он объявлен в маршрутах как вложенный ресурс, поэтому Galleryphoto не существует без Gallery в URL-адресе.

Чтобы исправить это, выполните любое из следующих действий:

<%= link_to image_tag(asset.photo.url(:thumb)), url_for(gallery, asset) %>

or

<%= link_to image_tag(asset.photo.url(:thumb)), gallery_galleryphoto_path(gallery, asset) %>
person Draiken    schedule 06.07.2012
comment
это сближает меня. Ссылки отображаются на моей странице галереи. 2-е решение работает. Однако теперь я получаю эту ошибку в своем контроллере: NoMethodError in GalleryphotosController#show undefined method `galleyphotos' for #‹Gallery:0x000000050239b0› - person bigdaveyl; 06.07.2012
comment
@bigdaveyl это несвязанная ошибка. Это происходит из-за того, что ваша модель Gallery не имеет :has_many :galleryphotos или она называется по-другому. - person Draiken; 06.07.2012
comment
Это не то. напишу еще вопрос - person bigdaveyl; 07.07.2012