首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4堆栈级错误太深

Rails 4堆栈级错误太深
EN

Stack Overflow用户
提问于 2014-08-30 07:40:15
回答 1查看 64关注 0票数 0

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

在我的列表模型中,我有一个“类别”字段。当用户选择一个类别时,我希望视图从该类别中筛选列表。

在我的routes.rb:

代码语言:javascript
复制
  get '/listings/c/:category' => 'listings#category', as: 'category'

要创建类别菜单-在我的index.html.erb中:

代码语言:javascript
复制
 <%= Listing.uniq.pluck(:category).each do |category| %>
    <%= link_to category, category_path(category: category) %> 
 <% end %>

在我的列表控制器中:

代码语言:javascript
复制
  def category
    @category = category
    @listings = Listing.not_expired.where(:category => @category)
  end

category.html.erb:

代码语言:javascript
复制
<% @listings.each do |listing| %>
        #some html
<% end %>

将显示主页类别菜单。路线是创建的。但是,当我单击这个类别时,url (如列表/c/项链)给我的堆栈级别带来了太深的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-30 08:11:44

FYI“堆栈级别太深”基本上意味着代码中有一个无限循环

--

据我所见,错误将出现在这里:

代码语言:javascript
复制
def category
    @category = category

使用这段代码,您基本上是再次调用category方法,该方法反过来将在一个永无止境的循环中调用category方法等。这将阻止您的应用程序能够在无限递归中不重新加载自己而运行。

你应该把它改为:

代码语言:javascript
复制
def category
    @category = params[:category]
    @listings = Listing.not_expired.where(:category => @category)
  end

然而,一种更为精细的方式是:

代码语言:javascript
复制
#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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25580170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档