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

时间:2016-06-01 09:13:41

标签: ruby-on-rails ruby

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

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

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

1 个答案:

答案 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="" />