2015-02-23 3 views
0

Мои пользователи создают коллекции и добавляют списки в каждую коллекцию. У меня есть главная страница профиля для каждого пользователя, показывающая все коллекции, созданные этим пользователем. Теперь я хочу связать каждую коллекцию с отдельной страницей, содержащей все списки в этой коллекции.Попытка просмотра коллекции продуктов, созданной пользователем, и ссылки/отображения в отдельном файле вида

Мой файл представления пользователю показать все коллекции:

<% @collections.each do |collection| %> 
    <%= image_tag listing.image.url(:thumb) %> 
    <%= link_to "#{collection.name}", shopcollected_path(collection_id: @collection) %> 
<% end %> 

Когда я нажимаю на моей ссылке я доставлен в отдельную страницу коллекции (shopcollected.html.erb) просто отлично, но результаты для этого коллекция не распознается, а страница не содержит списков. Я знаю, что я пропустил одну небольшую часть, но снова застрял на этом. Я все еще изучаю извлечение объектов из баз данных и привязки.

Мой listings_controller:

def shopcollections 
    @user = User.find(params[:id]) 
    @collections = Collection.where(user: User.find(params[:id])).order("created_at DESC") 
end 

def shopcollected 
    @user = User.find(params[:id]) 
    @listings = Listing.where(collection: :collection_id) 
end 

Мой индивидуальный пользователь 'shopcollected' Вид файла:

<% @listings.each do |listing| %> 
    <%= image_tag listing.image.url(:medium) %> 
    <%= listing.name %>` 
<% end %> 

Что мне не хватает? Я считаю, что мне нужно вызвать все списки по коллекции, но для этого, где мне нужно внести изменения в свой код?

+0

Вы можете отредактировать свой вопрос, чтобы исправить ошибки вроде этого (кнопка редактирования находится чуть ниже тегов). И, возможно, нам нужно будет увидеть код просмотра на странице shopcollected, так как я до сих пор не вижу ничего плохого в коде. –

+0

Спасибо @paul, я исправил свой пост выше и добавил в свой код файла просмотра. Мысли? – aep

+0

На самом деле, я считаю, что вижу ошибку.В вашем коде просмотра вверху есть 'shopcollected_path (collection_id: @collection)', но переменная, которую вы повторяете в этой точке, - это просто 'collection' (без символа at). Измените его соответствующим образом и это должно решить. –

ответ

0

Так как мы обсуждали в комментариях, были две проблемы, от которых страдает приложение:

В представлении пользователя, когда вы были итерация коллекции @collections, вы использовали неправильную переменную внутри цикла для обозначения к текущему объекту Collection (в частности, @collection вместо collection). Должно выглядеть так:

<% @collections.each do |collection| %> 
    <%= image_tag listing.image.url(:thumb) %> 
    <%= link_to "#{collection.name}", shopcollected_path(collection_id: collection) %> 
<% end %> 

Другой вопрос в методе shopcollected контроллера. Вы просто забыли указать часть params при попытке получить доступ к значению :collection_id из формы. Он должен выглядеть следующим образом:

def shopcollected 
    @user = User.find(params[:id]) 
    @listings = Listing.where(collection: params[:collection_id]) 
end 

Одно незначительное неродственного предложение, которое не будет иметь никакого влияния на производительность, но будет немного очистить свой код и сделать его более Rails-у смотреть; в случае shopcollections, если вы создали соответствующие belongs_to и has_many ассоциаций в моделях, есть немного короче способ отрываясь коллекции для конкретного пользователя, например, так:

def shopcollections 
    @user = User.find(params[:id]) 
    @collections = @user.collections.order("created_at DESC") 
end 

Это будет имеют такое же влияние, что и на предыдущую версию, поскольку Rails загрузит все коллекции для , которые пользователь, потому что вы вызываете метод отношений has_many. Поскольку большинство активных методов записи возвращают прокси-сервер, вы можете дополнительно вызвать другие методы, такие как order, которые теперь будут влиять на фильтрацию и упорядочение вычисленной коллекции has_many (в данном случае объекты Collection). Надеюсь, что это имеет смысл,

+0

Да, имеет смысл и работает. Итак, теперь, если я хочу связать эту отдельную коллекцию из другого места на моем сайте, я использую тот же код файла вида, что нужно изменить в файле link_to и controller для этой «другой» страницы, чтобы определить: id где-нибудь, так что [at] collections = Collection.includes (: listings) на моей странице сайта может идентифицировать использование, связанное с ним? Имеет ли это смысл? – aep

+0

@amyep Это зависит от того, как вы храните и обходите идентификатор пользователя. Является ли это для текущего пользователя? –

+0

Нет, это для тех, кто просматривает сайт. В настоящее время я определил: [at] user = User.where (collection: params [: collection_id]), а затем в моей link_to у меня есть shopcollected_path (коллекция). Поэтому прямо сейчас, когда я нажимаю на коллекцию, я вижу в url/shopcollected/15, поэтому он правильно видит и связывает коллекцию, просто не вытягивая идентификатор пользователя и списки. – aep