我正在本地计算机上开发一个小型Web应用程序。我想在全球范围内设置一些共同的信息。 这是我的代码:
应用程序/控制器/关切/ site_configuration.rb
module SiteConfiguration
mattr_accessor :site_name
mattr_accessor :banner_path
mattr_accessor :avatar_path
mattr_accessor :gallery_path
mattr_accessor :category_path
end
到config / environment.rb
SiteConfiguration.site_name = 'Site Name Here'
SiteConfiguration.banner_path = 'uploads/banners/'
SiteConfiguration.avatar_path = 'uploads/avatar/'
SiteConfiguration.gallery_path = 'uploads/gallery/'
SiteConfiguration.category_path = 'uploads/category/'
应用程序/视图/画廊/ index.html.erb
<img src="<%=root_path+SiteConfiguration.gallery_path+@gallery.image %>" alt="" />
这是我收到错误消息
图库中的TypeError #index
显示D:/xxx/project/app/views/galleries/index.html.erb第1行引发:
没有将nil隐式转换为String
以上代码正常工作。但是一个大问题是每次需要重新启动服务器时所做的任何更改。
如果我重新启动服务器,那么它的工作正常。几分钟后如果需要任何更改我得到相同的错误消息。让我知道那里有什么问题?
答案 0 :(得分:2)
您可以使用延迟评估字符串:
<img src="<%= "#{root_path}#{SiteConfiguration.gallery_path}#{@gallery.image}" %>" alt="" />
但最好确保为什么其中一个字段变为nil
?同时将代码移动到帮助器或装饰器。
要使配置可自定义,请使用config
gem。所以你只有一个YML文件:
<强>配置/ settings.yml中强>:
---
site_name: 'Site Name Here'
banner_path: 'uploads/banners/'
avatar_path: 'uploads/avatar/'
gallery_path: 'uploads/gallery/'
category_path: 'uploads/category/'
因此,您必须使用Settings
常量而不是SiteConfiguration
:
<img src="<%= "#{root_path}#{Settings.gallery_path}#{@gallery.image}" %>" alt="" />