Rails 4堆栈级别太深错误

时间:2014-08-30 07:40:16

标签: ruby-on-rails

我正在创建一个卖家可以列出待售商品的市场应用。我想创建一个类别下拉列表,以便客户可以选择要购物的类别。

在我的列表模型中,我有一个'类别'领域。当用户选择一个类别时,我希望该视图可以过滤该类别中的列表。

在我的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 %>

显示主页类别菜单。路线已创建。但是当我点击类别时,像listing / c /项链这样的网址会给我堆栈级别太深的错误。

1 个答案:

答案 0 :(得分: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