我的控制器的“新建”和有时的“编辑”操作会引发以下问题:
First argument in form cannot contain nil or be empty
Resource.new
权限/new.haml
= form_for @permission do |f|
= f.label :name, class: 'form-control-label'
= f.text_field :name, class: 'form-control'
class PermissionsController < ApplicationController
before_action :set_permission, only: [:show, :edit, :update, :destroy]
def new
@permission = Permission.new
end
def show
@modules = Modules.all
end
def index
// handling content with api calls instead
end
...
end
我可以通过转到同一控制器的'show'操作,然后返回'index'操作,然后转到'new'操作来重现这个问题。在这一点上'新'页不再工作,直到我编辑控制器文件或重新启动服务器。
这不是发生这种情况的唯一资源。像User这样的其他资源通常也有同样的问题。我已经有多个项目,有相同的问题,不知何故消失,所以我从来没有费心调查更多的这个问题。
Ruby版本:2.3.5p376
编辑:
我注意到,如果我把它注释掉,我就不能再复制了
Modules.all
.
模块.rb
class Modules
def self.all
controllers = Dir.glob("#{Rails.root}/app/controllers/**/*.rb").
map{ |e|
if e.include?('/api/')
e.match(/api\/[^\/]*\/[^\/]*.rb/)[0].gsub('.rb', '').gsub('/', '::_').camelcase
else
e.match(/[^\/]*.rb/)[0].gsub('.rb', '').camelcase
end
}
modules = {}
controllers.each do |e|
c = Object.const_get e
modules[e.gsub(':','').gsub('Controller', '').underscore] = get_actions_for c if
!no_permission_needed_for e and c.action_methods.size > 0
end
return modules
end
def self.get_actions_for(controller)
actions = controller.action_methods
grouped_actions.each do |key, value|
actions.delete(key)
end
return actions
end
def self.grouped_actions
{"new" => "create", "edit" => "update"}
end
end
编辑:
我注意到我正在打电话给
actions.delete(key)
其中行动是
Set
弦的位置
key
是一个
String
当我这么做的时候
actions = controller.action_methods.to_a
把布景变成一个阵列我的问题似乎消失了。至少我不能再复制了。现在我想知道ruby中是否有什么地方出了问题,从
在引擎盖下做奇怪的事情。