内部服务器错误红宝石未定义方法

时间:2018-08-10 08:48:56

标签: ruby

因此,当我运行ruby server.rb并转到本地主机时,会出现此错误。

内部服务器错误 [“ / home”,“ / admin”]的未定义方法'new':Array WEBrick / 1.3.1(Ruby / 2.4.1 / 2017-03-22)位于localhost:8080

在这里输入代码

server.rb

require 'rack'
require_relative 'view'
require_relative 'route'

class App

  PAGES = %w{ /home /admin}

  def call(env)
    response_headers = {}


    request_cookies = Rack::Utils.parse_cookies(env)


    unless request_cookies["session_key"]
      Rack::Utils.set_cookie_header!(response_headers, "session_key", Time.now.to_f)
    end



    count = request_cookies["session_count"].to_i
    count += 1

    Rack::Utils.set_cookie_header!(response_headers, "session_count", count)


    route_name = Route.new(env).name



    pages = PAGES.new(route_name, visit_count: count)


    [status, response_headers, [pages.render]]
  end
end

Rack::Handler::WEBrick.run App.new

route.rb

class Route

  ROUTES = {
    "/home" => :home,
    "/admin" => :admin
  }

  def initialize(env)
    if(env["REQUEST_METHOD"] == "GET")
      @name = ROUTES[env["PATH_INFO"]]
    end
  end

  def name
    @name || "404"
  end
end

view.rb

class View
  def initialize(page, data = {})
    @data = data
    @page = page
    file = File.join(File.dirname(__FILE__), "./pages/#{page}.html.erb")
    @page = File.read(file)
  end

  def visit_count
    @data[:visit_count]
  end

  def render
    ERB.new(@page).result(binding)
  end
end

某处是否存在路由错误?我不太确定数组的new未定义方法意味着什么。谁能帮助解决这个问题? 我正在按照指南进行操作,似乎某个地方可能有错误。

1 个答案:

答案 0 :(得分:0)

代替

pages = PAGES.new(route_name, visit_count: count) 

您应该做

view = View.new(route_name, visit_count: count) 

并返回[status, response_headers, [view.render]]