SystemStackError,当尝试路由到rails中的控制器时,堆栈级别太深

时间:2015-04-18 00:03:35

标签: ruby-on-rails

错误说

  

FacilitatorController中的SystemStackError #index

但它不是控制器的问题,因为如果我在那里改变线条没有任何反应。它确实到达了控制器。我认为这可能是一个路由问题,但我不确定是什么导致它。

链接

<%= link_to "Add Facilitators", facilitator_index_path(:course => @course.id), >:method => :get %>

相关路线

resources :facilitator
delete '/facilitator', to: 'facilitator#delete', as: 'facilitator_delete'

某些控制器

class FacilitatorController < ApplicationController
  def index
    @course = Course.find(params[:course])
    if params[:search_field]
      @user = User.select{|user| user.email.downcase.include? params[:search_field].downcase}
    else
      @user = User.where('id not in (?)', @course.facilitators)
    end
  end
end

我认为这可能与课程模型有关,这些模型通过别名提供辅导员,并且与辅导员控制器相冲突?

class Course < ActiveRecord::Base
...

  has_many :facilitate_ownedcourses, foreign_key: :ownedcourse_id
  has_many :facilitators, through: :facilitate_ownedcourses, source: :facilitator

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

首先,您的link_to中有一个拼写错误,应该是:method而不是>:method

同样在你的控制器中

@user = User.select{|user| user.email.downcase.include? params[:search_field].downcase}

应该是

@user = User.all.select{|user| user.email.downcase.include? params[:search_field].downcase}

或更好

@user = User.where('email like ?', "%#{params[:search_field].downcase}%")

要处理case,如果您使用的是postgres,则可以更改like ilike,或者如果您使用的是mysql,则可以使用lower(email)

答案 1 :(得分:0)

首先,你有一个语法错误&#34;添加辅导员&#34;链接,假设它输入错误。

其次,回溯将有助于提供建议,但有以下建议:

  • 检查任何查找器回叫
  • 迭代调用方法,可能是在来自控制器的before_action期间。