如何修复Ruby中“没有将nil隐式转换为String”

我正在我的本地机器上开发一个小型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

 " alt="" /> 

这是我收到错误消息

画廊中的TypeError #index

显示D:/xxx/project/app/views/galleries/index.html.erb,其中第1行引发:

没有将nil隐式转换为String

以上代码工作正常。 但是一个大问题是每次需要重新启动服务器时所做的任何更改。

如果我重启服务器,那么它的工作正常。 几分钟后如果需要任何更改我得到相同的错误消息。 让我知道那里有什么问题?

您可以使用延迟评估字符串:

 " alt="" /> 

但更好的是确保,为什么这个领域之一变成nil ? 同时将代码移动到帮助器或装饰器。

要使配置可自定义,请使用config gem。 所以你只有一个YML文件:

config / 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

 " alt="" />