我在www.example.com上尝试部署rails 7时遇到了这个错误render.com然后是:
if url.nil? || url.start_with?("jdbc:", "http:", "https:")
我是一个新手,请帮助。
ve7v8dk21#
start_with?是一个String的方法,但是url是一个Hash。如果你想对Hash中包含的一个值运行start_with?,你还需要传递key。例如:
url['database'].start_with?("car")
fdx2calv2#
正如错误消息中所解释的,方法start_with?不存在于Hash类型的对象中。在错误消息之后,变量url的真实的值是以下Hash:{"database"=>"car_rental_production", "username"=>"dev", "password"=>nil}您的代码看起来不错,但url的真实的值似乎是Hash而不是String。有一个方法respond_to?,它允许在调用对象之前确保对象的方法存在。
start_with?
url
{"database"=>"car_rental_production", "username"=>"dev", "password"=>nil}
Hash
String
cwdobuhd3#
看起来你的url变量指向一个Hash而不是一个String。has包含String键和String值。所以首先你需要获取与数据库键关联的值:database = url["database"]然后对该值运行检查。如果键“database”应该始终存在,则还可以运行url.fetch("database")如果丢失,将引发错误。但值仍然可以是nil。完整的例子如下所示:
database = url["database"]
url.fetch("database")
nil
url = {"database"=>"car_rental_production", "username"=>"dev", "password"=>nil} database = url["database"] if database.nil? || database.start_with?("jdbc:", "http:", "https:") puts "here" else puts "there" end
这将打印出there,因为数据库有一个值,但它不会启动任何您想要检查的前缀。
there
3条答案
按热度按时间ve7v8dk21#
start_with?是一个String的方法,但是url是一个Hash。如果你想对Hash中包含的一个值运行start_with?,你还需要传递key。例如:
fdx2calv2#
正如错误消息中所解释的,方法
start_with?
不存在于Hash类型的对象中。在错误消息之后,变量
url
的真实的值是以下Hash:{"database"=>"car_rental_production", "username"=>"dev", "password"=>nil}
您的代码看起来不错,但
url
的真实的值似乎是Hash
而不是String
。有一个方法respond_to?,它允许在调用对象之前确保对象的方法存在。
cwdobuhd3#
看起来你的
url
变量指向一个Hash
而不是一个String
。has包含String键和String值。所以首先你需要获取与数据库键关联的值:
database = url["database"]
然后对该值运行检查。如果键“database”应该始终存在,则还可以运行
url.fetch("database")
如果丢失,将引发错误。但值仍然可以是
nil
。完整的例子如下所示:
这将打印出
there
,因为数据库有一个值,但它不会启动任何您想要检查的前缀。