Ruby 为什么这个“POST”请求有效而无效

Ruby 为什么这个“POST”请求有效而无效,ruby,sinatra,Ruby,Sinatra,我在演示一个我正在教的课程的应用程序时遇到了一个bug。我在一个Sinatra应用程序中演示POST请求。以下是我的路线: require "bundler/setup" require "sinatra" require "sinatra/reloader" first_names = [] get '/' do @first_names = first_names erb :index end post '/add_name' do first_names << p

我在演示一个我正在教的课程的应用程序时遇到了一个bug。我在一个Sinatra应用程序中演示
POST
请求。以下是我的路线:

require "bundler/setup"
require "sinatra"
require "sinatra/reloader"
first_names = []
get '/' do
  @first_names = first_names
  erb :index
end

post '/add_name' do
  first_names << params[:first_name]
  redirect "/"
end
档案:

source 'https://rubygems.org'

gem "sinatra"
gem "sinatra-contrib"

注意表单中未关闭的
input
标记。这确实有效。哪一个是好的,HTML是错误的?但让我感到困惑的是,如果我将表单的
操作
更改为
addd_name
(错贴)。它没有给我预期的错误。“西纳特拉不知道这个混蛋……”它什么也没做。有什么想法吗?

如果您关闭输入标签,并试图将操作拼错为
“/addd_name”
,您将得到小曲错误:)

在这种情况下,浏览器不会将“表单”作为表单处理。从开发者控制台检查网络选项卡。当您单击submit按钮时,您将看到什么也没有发生


顺便说一句,如果您没有声明(例如在
configure do…end
block)
first\u names
array,您将得到另一个错误-nilClass或类似的错误

您确定它可以处理缺少的结束标记(单击按钮,而不仅仅是按enter键)吗?我认为发生的情况是,缺少的
导致浏览器将结束
解析为输入的两个属性:
欢迎使用堆栈溢出。请读“。你的代码有语法错误;两次出现的
名字
都未定义,但是
@名字
仅在
get
处理程序中分配。正如@matt所说,您缺少了尾随的
,但是浏览器可能能够进行一些修复并正确呈现页面。不过,你也应该让你的HTML语法正确。我只是把问题的一部分放在了相关的代码上。我可以扩展我的问题,我理解,我试图最小化。@马特,谢谢,这是有道理的,但在正确的操作时单击它会提交请求(缺少
)。这就是奇怪的部分。但是当它是错误的操作时,不会抛出错误。just not submit any request
first_names
只是在
app.rb
中实例化为空数组。如果操作错误,问题在于它没有给我带来问题。
source 'https://rubygems.org'

gem "sinatra"
gem "sinatra-contrib"