【问题标题】:Ruby on Rails Views not working even when blank即使为空白,Ruby on Rails 视图也不起作用
【发布时间】:2015-04-01 02:16:38
【问题描述】:

我有一个 Rails 应用程序,它有几个视图工作。我做了一些我无法轻易恢复的更改(我知道,大错特错,主要是视图)。我相信我正确地遵循了 Rails 文件夹结构约定,因为视图正常工作。现在,当我尝试在浏览器中查看 ANY 视图时,出现以下错误:

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 用于路径。

编辑 2(已解决): 我一直在使用 unicorn_rails 来部署我的网站。我不知道为什么,但我认为我的独角兽服务器在每次请求时都会超时。重新启动服务器进程消除了这些错误。

【问题讨论】:

  • ActionController::RoutingError --> 在 config/routes.rb 中发布相关路由以及您为该特定控制器拥有的文件夹结构。
  • 我发布了您要求的信息。
  • 如果我不得不猜测的话,我会说这是为instance 命名您的文件夹或目录(M、V 或 C)之一。您是否曾在某一时刻手动重命名任何内容,或者在某处意外地使用了复数形式?那些ActionController::RoutingError 错误通常意味着路由没有找到正确的视图或控制器。还要检查类名是否正确并与文件名匹配。
  • 三遍检查后,我决定重启独角兽服务器,所有错误都消失了。

标签: ruby-on-rails ruby


【解决方案1】:

我认为您在索引视图中的@server_list 或@instances 上调用each,并且可能其中一个实例变量是nil

如果是这样,您应该将 each 块包装在 if 语句中,如下所示:

<% if @instances %>
  <% @instances.each do |instance| %>
    .....
    do your thing here...
    .....
  <% end %>
<% end %>

你也可以在一个变量上调用to_a,如果变量为nil,它会返回一个空数组而不是nil。

<% @instances.to_a.each do |instance| %>
  .....
  do your thing here...
  .....
<% end %>

【讨论】:

  • 当我看到 .each 被一个 nil 变量调用时,这是我的第一个想法。但是,执行上述操作,甚至删除视图中对 .each 的所有调用(即使只是将视图设为空白页或一些通用 JSON/HTML)也会导致相同的错误。就像 Rails 框架中的某些东西在调用每个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多