Rails不可编辑文本字段


82

我有一个form_for以下列方式编写:

<div class="field">
    <%= location.label :city %>
    <%= location.text_field :city, :disabled=>true%>
</div>
<div class="field">
    <%= location.label :country %>
    <%= location.text_field :country, :disabled=>true%>
</div>

如您所见,禁用了2个文本字段,因为它们由jquery函数自动填充,并且我不想让用户处理它们。问题在于,以这种方式,视图不会将该参数传递给控制器​​,因为已将其禁用!还有其他方法可以将不可编辑的text_field传递给控制器​​,请注意我不想使用隐藏字段,因为我想在文本框内向用户显示结果

TNX


您是否在提交前启用带有jQuery的字段?
apneadiving 2011年

我正在做...您是否不知道有没有更清洁的方法?

Answers:


196

将其设为只读!

<%= location.text_field :country,:readonly => true%>

9
当场。在W3规范形式的区分disabled,并read-only和清楚地表明,残疾人的投入不应该与表单数据提交。
罗宾·费舍尔

1
谢谢!我可能还要花半个小时才能弄清楚为什么:disabled => true不提交我的领域。
汤姆·哈里森

3
但是,如果我希望在Create操作时可以访问该字段怎么办?
2013年

1
但是使用这种方法,任何人都可以在提交前进行编辑。这不是脆弱的。
mecyborg 2014年

1
是的,这很脆弱。用户可以使用其浏览器“开发人员工具”(按F12键)删除标签的readonly="readonly"属性,input并根据需要编辑文本字段。如果确实需要这样做,请完全删除输入字段或验证模型上的表单输入。无论如何,这是一个非常有用的答案。
BrunoFacca

1

诀窍是将“对象”和标签一起用于您不想更改的任何内容。这是你应该如何编码的:

<%= location.label(:country, f.object.country) %>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.