2014-08-30 8 views
0

Я создаю приложение на рынке, где продавцы могут перечислить предметы для продажи. Я хочу создать раскрывающийся список категорий, чтобы клиенты могли выбрать категорию для покупки.Rails 4 Уровень стека слишком глубокий Ошибка

В моей модели объявлений у меня есть поле категории. Когда пользователь выбирает категорию, я хочу, чтобы представление фильтровало списки из этой категории.

В моем routes.rb:

get '/listings/c/:category' => 'listings#category', as: 'category' 

Для создания меню категорий - в моем index.html.erb:

<%= Listing.uniq.pluck(:category).each do |category| %> 
    <%= link_to category, category_path(category: category) %> 
<% end %> 

В моем контроллере объявлений

def category 
    @category = category 
    @listings = Listing.not_expired.where(:category => @category) 
    end 

category.html.erb:

<% @listings.each do |listing| %> 
     #some html 
<% end %> 

Отображается меню категории домашней страницы. Маршруты создаются. Но когда я нажимаю на категорию, url, такой как списки/c/necklaces, дает мне слишком высокий уровень стека.

ответ

2

FYI "Stack Level Too Deep" в основном означает, что у вас есть бесконечный цикл в коде где-то

-

Из того, что я могу видеть, ошибка будет здесь:

def category 
    @category = category 

С помощью этого кода вы в основном ссылаетесь на метод category, который в свою очередь будет вызывать метод category и т. Д. В бесконечном цикле. Это не позволит вашему приложению работать без перезагрузки в бесконечной рекурсии.

Вы должны изменить его на:

def category 
    @category = params[:category] 
    @listings = Listing.not_expired.where(:category => @category) 
    end 

Однако, гораздо более утонченный способ будет:

#app/models/category.rb 
class Category < ActiveRecord::Base 
    has_many :listings do 
     def not_available 
     #your not available method here 
     end 
    end 
end 

#app/models/listing.rb 
class Listing < ActiveRecord::Base 
    belongs_to :category 
end 

#app/controllers/your_controller.rb 
def category 
    @category = Category.find params[:categpry] 
    @listings = @category.listings.not_available 
Смежные вопросы