【问题标题】:Sinatra App Routes Not Working As AnticipatedSinatra 应用程序路由未按预期工作
【发布时间】:2017-06-03 04:41:31
【问题描述】:

我一直在做关于 Skillcrush 的 Ruby 课程(仍然非常业余),并且在课程的一部分中我的代码无法正常工作。

该应用程序使用 Sinatra,并且应该在转到 localhost:9292/people 时显示 views/people/index.erb,但它会转到错误页面,当在 localhost:9292/ 之后给出错误的扩展名(通常是日期格式) ,但如果输入其他任何内容,它应该会带来错误)。

我不得不在课程中途更换电脑,所以感觉可能与我的设置有关。我使用了他们提供的代码并使用diff --brief -r dir1/ dir2/ 检查了差异,并且只能在我的Gemfile.lock 文件中看到一些。由于 Ruby 2.0 之前的 gem 存在问题,我正在使用 Ruby 2.4,想知道是否可能是这种情况?

我的代码可以看到here

任何人都可以看到任何明显的问题吗?

【问题讨论】:

  • 请在此处发布您的代码。您只推送了一个自述文件
  • 在 sinatra 中默认文件夹是 views 但你有 view
  • 我现在已经上传了其余的代码。 @maxple 抱歉,这是一个错字。
  • @DaveC 人们不太可能愿意浏览您的 Github 存储库中的代码,扫描整个内容以查找错误。无论如何,最重要的是错误本身,您应该将其粘贴为文本
  • 错误是它发布了 哎呀!您应该以 mmddyyyy 的形式输入有效的生日。再试一次!index_controller.rb 中,如前所述转到localhost:9292/people。终端中没有实际错误。我想知道它是否在红宝石或相关宝石中发生了变化,否则它似乎没有意义。

标签: ruby routes sinatra


【解决方案1】:

我相信正在发生的事情是 Sinatra 将您的 url localhost:9292/people 模式匹配到您的索引控制器的第一条路由 get '/:birthdate' 而不是 get '/people'。 Sinatra 接受请求,然后按顺序检查每个路由,第一个匹配的然后处理请求。

对此进行测试:

  • 尝试将 get '/:birthdate' 更改为 get '/birthdate/:birthdate'(如果可行,则必须适当地更改指向生日的任何链接)。

  • 注释掉生日路线

  • 将所有路由移动到同一个文件中并更改它们的排列顺序,以了解模式匹配是如何发生的。

【讨论】:

  • 这就是我的想法,但我正在学习一个课程,它似乎对其他人有用?我有点担心,如果我更改代码,我会忘记课程。
  • 我很好奇您是否尝试过我的建议之一,看看这是否是导致错误的原因(第二个将是我要开始的地方)。此外,第一个建议是一个非常良性的变化,我认为它不会让你在前进中遇到太多麻烦。基本上,如果课程要求您链接到/<%= #{birthdate} %>,您只需将其更改为/birthdate/<%= #{birthdate} %>
  • 它确实可以通过这样做来工作,这是我的假设。显然,它不允许用户在域之后直接输入他们的出生日期,尽管如此。奇怪的是,当课程中的其他人似乎没有遇到同样的问题时,它为什么不起作用。
  • 切换电脑时,控制器文件的顺序是否可能发生变化?
  • 它们将如何排列?按日期?
猜你喜欢
  • 2014-05-02
  • 2015-12-25
  • 2016-08-19
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多