Ruby on rails 单击Submit按钮和Rails中的create方法之间会发生什么?

Ruby on rails 单击Submit按钮和Rails中的create方法之间会发生什么?,ruby-on-rails,Ruby On Rails,我这样问是因为我有一个单选按钮设置为nil的表单: = f.radio_button :estimate_type, nil 在方法调用的开始处有调试器: def create debugger 当我点击调试器时,我检查我的参数,他们说值是on而不是nil 进入疯狂狼。不知何故,这是得到转换点击。我已经搜索了整个应用程序,寻找可能存在漏洞的javascript文件,或者任何类似“on”这个词的东西。我已经检查了我所有的基地。schema.rb、jquery click events、m

我这样问是因为我有一个单选按钮设置为nil的表单:

 = f.radio_button :estimate_type, nil
在方法调用的开始处有调试器:

def create
  debugger
当我点击调试器时,我检查我的参数,他们说值是
on
而不是
nil

进入疯狂狼。不知何故,这是得到转换点击。我已经搜索了整个应用程序,寻找可能存在漏洞的javascript文件,或者任何类似“on”这个词的东西。我已经检查了我所有的基地。schema.rb、jquery click events、model validations中的默认值。任何地方都没有“开”字


所以真正的问题是,有没有一种方法可以将调试器扔到这样一个位置:如果我单击submit,调试器将在模型验证之前出现,然后希望参数仍然是表单中的参数。然后我可以跟踪它,看看哪里出了问题。

这与您的JavaScript无关。这也是我以前经历过的,但我不确定为什么它会将nil转换为on。我知道作为一个符号传入
:nil
会返回一个空字符串,并且只需传入
false

与JavaScript无关。这也是我以前经历过的,但我不确定为什么它会将nil转换为on。我知道以符号形式传入
:nil
会返回空字符串,除了简单地传递
false
之外,解决问题的更好方法可能是将调试器放入验证回调本身。

解决问题的更好方法可能是将调试器放入验证回调本身。

与rails无关-您可以通过使用浏览器的网络检查器查看浏览器是否实际发送参数值“开”

通过尝试将值设置为nil(这实际上没有意义——参数值总是字符串),您完全从生成的HTML中抑制了value属性


在这种情况下,输入的默认值应为“开”,因此这是您的浏览器提交的值。

与rails无关-您可以通过使用浏览器的网络检查器查看浏览器是否实际发送参数值“开”来验证这一点

通过尝试将值设置为nil(这实际上没有意义——参数值总是字符串),您完全从生成的HTML中抑制了value属性


在这种情况下,输入的默认值应为“开”,这就是浏览器提交的内容。

大多数参数的转换都发生在
ActionDispatch::ParamsParser
中间件中,因此获取原始参数很困难。但这是一个开始寻找的地方。谢谢艾米丽,约翰纳诺,罗恩,张弗雷德里克!你们帮了我很多忙!大多数参数的转换都发生在
ActionDispatch::ParamsParser
中间件中,因此获取原始参数将非常困难。但这是一个开始寻找的地方。谢谢艾米丽,约翰纳诺,罗恩,张弗雷德里克!你们帮了我很多忙!