Ruby on Rails即使在空白时也无法正常工作

时间:2015-03-27 22:05:38

标签: ruby-on-rails ruby

我有一个有几个视图工作的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来部署我的网站。我不知道为什么,但我认为我的独角兽服务器在每次请求时都会超时。重新启动服务器进程会删除这些错误。

1 个答案:

答案 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 %>