Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将操作积垢到模块中,导致堆栈级别太深错误_Ruby On Rails_Ruby_Crud - Fatal编程技术网

Ruby on rails 将操作积垢到模块中,导致堆栈级别太深错误

Ruby on rails 将操作积垢到模块中,导致堆栈级别太深错误,ruby-on-rails,ruby,crud,Ruby On Rails,Ruby,Crud,我试图创建一个包含标准crud函数的模块。这是否可以做到,是否明智,是否经得起实践,我想自己去看看。到目前为止,我已经创建了标准get请求,没有问题。然而,我试图实现一个create操作,却遇到了一个“堆栈级别太深的错误” class FlagsController < ApplicationController include CrudConcern before_action lambda { crud_index(Flag.all) }, only: :index be

我试图创建一个包含标准crud函数的模块。这是否可以做到,是否明智,是否经得起实践,我想自己去看看。到目前为止,我已经创建了标准get请求,没有问题。然而,我试图实现一个create操作,却遇到了一个“堆栈级别太深的错误”

class FlagsController < ApplicationController
  include CrudConcern

  before_action lambda { crud_index(Flag.all) }, only: :index
  before_action lambda { crud_new(Flag.new) }, only: :new
  before_action lambda { crud_create(Flag.new, flags_path) }, only: :create


  def create
  end  

end
为什么会发生这种情况?有办法绕过它吗?有一种名为Crudify的宝石提供了这一点,所以我认为它是可以做到的


谢谢

看起来您传递的是模型的实例,而不是方法所期望的模型类。我想你的意思是:

# in controller
before_action lambda { crud_create(Flag, flags_path) }, only: :create

# in crud module
def crud_create(model, route)
  variable = model.new(params) # change is here
  if variable.save 
    flash[:notice] = "Saved!"
    redirect_to route
  else
    flash[:error] = "Try again"
    render :new 
  end
end
更新

它也可能是一个重定向循环<代码>标志\u路径可能会碰到相同的
创建
方法(与索引相反),该方法会在操作之前不断地碰到
crud\u创建
,导致
堆栈级别太深
错误。尝试将重定向更改为测试:)

为避免再次点击
create
,您可能必须将状态设置为303。从
的APIDock条目重定向到

如果您使用的是非GET或POST和重定向的XHR请求 在请求之后,一些浏览器将使用 原始请求方法。这可能会导致不良行为 例如双重删除。要解决此问题,您可以返回303,请参见 使用GET请求将遵循的其他状态代码


示例:
redirect\u to route,status:303

它仍然给出相同的错误。我试过这种变化,但没用。
# in controller
before_action lambda { crud_create(Flag, flags_path) }, only: :create

# in crud module
def crud_create(model, route)
  variable = model.new(params) # change is here
  if variable.save 
    flash[:notice] = "Saved!"
    redirect_to route
  else
    flash[:error] = "Try again"
    render :new 
  end
end