【问题标题】:Ruby/Sinatra is not passing variable from module fileRuby/Sinatra 没有从模块文件中传递变量
【发布时间】:2020-03-19 05:09:22
【问题描述】:

我正在尝试使用模块等在网页上打印名称,但我似乎无法弄清楚如何从模块文件中传递变量。

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>

输出应该是你好,鲍勃,但我只是得到你好。

【问题讨论】:

  • 我对sinatra一无所知,但你不应该在任何地方显式调用Display_name#disname方法来设置这个变量吗?
  • 我不这么认为,Display_name是模块名disname是方法名

标签: ruby sinatra


【解决方案1】:

当您包含该模块时,您使其所有方法都可用于路由器实例。因此,只需在没有显式接收器(模块)的情况下调用disname,以便将其分派到路由器本身并且它应该可以工作:

# ...

get "/" do  
  disname
  erb :home
end

(旁注:Display_name 看起来像是来自 OCaml 世界的外星人;Ruby 命名类/模块的约定是驼峰式 - DisplayName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2015-04-01
    • 2023-03-23
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多