如果禁用,Rails form_tag不会发送params:true

Bha*_*hah 18 ruby-on-rails-4

我的视图中有一个form_tag,其中嵌入了一些text_field_tag.我不希望用户编辑文本字段,所以我做了:disabled => true.

问题:如果我这样做:disabled => true文本字段值不在params散列中传递,而如果我这样做:readonly => true它确实发送params散列值

这是预期的吗?如果是,那么在文档中没有提到这一点.如果没有,那么我应该在GitHub中提出问题吗?

Dav*_*ers 32

是的,这是预期的行为.在Rails文档中可能没有提到它,因为disabledreadonly控制行为是由W3C规范定义的.

有关禁用控件的信息,请参阅W3C文档,其中指出"禁用的控件无法成功"."成功"控制被定义为"有效"提交.在Rails中设置disabledtrue输入字段不会导致它不被提交.

但是,只读控件可以成功.因此,如果您希望提交值但不可编辑,则应使用readonlyset to true.


Jor*_*ing 8

是的,这是预期的,但它与Rails无关.根据HTML5规范,disabled在提交表单时跳过表单字段(参见4.10.22.4构造表单数据集).

如果您不希望用户能够编辑该字段,但仍希望其数据与表单一起提交,则应使用该readonly属性,例如:

<%= text_field_tag 'year', '2015', readonly: true %>
Run Code Online (Sandbox Code Playgroud)