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