我有一个有几个视图工作的rails应用程序。我做了一些我无法轻易修改的修改(我知道,大错,主要是对于观点)。我相信我正确遵循Rails文件夹结构约定,因为视图WERE正常工作。现在,当我尝试在浏览器中看到任何视图时,我收到以下错误:
ActionController::RoutingError (undefined method `each' for nil:NilClass):
app/controllers/application_controller.rb:1:in `<top (required)>'
app/controllers/instance_controller.rb:4:in `<top (required)>'
我没有在application_controller或instance_controller中调用每个。 instance_controller是与我试图呈现的视图相关的控制器。如果我使用不同的视图,我将在错误消息中看到不同的控制器而不是instance_controller。 Application_controller是instance_controller的父级。即使只使用一些纯文本或JSON更改为空视图也会产生相同的错误。是否有一些潜在的Rails事件正在发生,我可能已被覆盖或某事?一般来说,MVC和Rails仍然是新手。即使你不能给我确切的答案,但也许有一些要检查的东西,任何有用的东西。
application_controller:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
end
instance_controller:
require 'openssl'
require 'base64'
include HTTParty
class InstanceController < ApplicationController
def index
@tab = 'instance'
@server_list = Server.get_server_list()
@instances = ::ServerList.get_instances_on_all_servers
end
def self.update_credentials
Rails.logger.info(params.to_s)
in__hash = {
<some parameters>
}
response = put(
<some_path_I_can't_post>
)
end
end
编辑:请求了其他信息,config / routes.rb:
Rails.application.routes.draw do
resources :server
resources :instance
end
运行rake路线的输出:
Prefix Verb URI Pattern Controller#Action
server_index GET /server(.:format) server#index
POST /server(.:format) server#create
new_server GET /server/new(.:format) server#new
edit_server GET /server/:id/edit(.:format) server#edit
server GET /server/:id(.:format) server#show
PATCH /server/:id(.:format) server#update
PUT /server/:id(.:format) server#update
DELETE /server/:id(.:format) server#destroy
instance_index GET /instance(.:format) instance#index
POST /instance(.:format) instance#create
new_instance GET /instance/new(.:format) instance#new
edit_instance GET /instance/:id/edit(.:format) instance#edit
instance GET /instance/:id(.:format) instance#show
PATCH /instance/:id(.:format) instance#update
PUT /instance/:id(.:format) instance#update
DELETE /instance/:id(.:format) instance#destroy
我们有app / controllers / instance_controller.rb和 app / controllers / application_controller.rb for paths。
编辑2(已解决): 我一直在使用unicorn_rails来部署我的网站。我不知道为什么,但我认为我的独角兽服务器在每次请求时都会超时。重新启动服务器进程会删除这些错误。
答案 0 :(得分:1)
我想你在索引视图中的@server_list或@instances上调用each
,其中一个实例变量可能是nil
。
如果是这样,您应该将each
块包装在if
语句中,如下所示:
<% if @instances %>
<% @instances.each do |instance| %>
.....
do your thing here...
.....
<% end %>
<% end %>
如果变量为nil,你也可以在一个变量上调用to_a
,该变量将返回一个空数组而不是nil。
<% @instances.to_a.each do |instance| %>
.....
do your thing here...
.....
<% end %>