Ruby / Sinatra не передает переменную из файла модуля - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь напечатать имя на веб-странице, используя модули et c, но я не могу понять, как передать переменные из файла модулей.

main.rb

require 'sinatra' # includes gem to process web pages
set :bind, '0.0.0.0' # sets default url address to localhost

require_relative('modules')
include Display_name

get "/" do  
    Display_name.disname()
    erb :home
end

modules.rb

module Display_name

    def disname()
        @myname = "Bob"
    end
end

views / home.erb

<h1> Hello <%= @myname %> </h1>

Вывод должен быть Hello bob, но я просто получаю Привет.

1 Ответ

0 голосов
/ 19 марта 2020

Когда вы включили модуль, вы сделали все его методы доступными для экземпляра маршрутизатора. Поэтому просто вызовите disname без явного получателя (модуля), чтобы он был отправлен самому маршрутизатору, и он должен работать:

# ...

get "/" do  
  disname
  erb :home
end

(примечание: Display_name выглядит l ie пришелец, пришедший из мира OCaml; Ruby соглашение по именованию классов / модулей - верблюжий случай - DisplayName)

...