ruby 无方法错误:未定义的方法`start_with?' for {“database”=>“car_rental_production”,“username”=>“dev”,“password”=>nil}:Hash

yxyvkwin  于 2023-03-22  发布在  Ruby
关注(0)|答案(3)|浏览(117)

我在www.example.com上尝试部署rails 7时遇到了这个错误render.com然后是:

if url.nil? || url.start_with?("jdbc:", "http:", "https:")

我是一个新手,请帮助。

ve7v8dk2

ve7v8dk21#

start_with?是一个String的方法,但是url是一个Hash。如果你想对Hash中包含的一个值运行start_with?,你还需要传递key。例如:

url['database'].start_with?("car")
fdx2calv

fdx2calv2#

正如错误消息中所解释的,方法start_with?不存在于Hash类型的对象中。
在错误消息之后,变量url的真实的值是以下Hash:{"database"=>"car_rental_production", "username"=>"dev", "password"=>nil}
您的代码看起来不错,但url的真实的值似乎是Hash而不是String
有一个方法respond_to?,它允许在调用对象之前确保对象的方法存在。

cwdobuhd

cwdobuhd3#

看起来你的url变量指向一个Hash而不是一个String。has包含String键和String值。
所以首先你需要获取与数据库键关联的值:
database = url["database"]
然后对该值运行检查。如果键“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,因为数据库有一个值,但它不会启动任何您想要检查的前缀。

相关问题