我的问题是如何设置只读的rails形式的字段。以下是引号控制器中的选择框。用户不允许更改选择。
<% @quote.test_items.each do |t| %>
<%= f.association :test_items, :label => false, :selected => t.id %>
<% end %>
该应用使用simple_form。非常感谢。
答案 0 :(得分:41)
我遇到了类似的问题,谢天谢地,有一个简单的解决方案。
基本问题是,如果您使用带有simple_form的:disabled => true
,您将无法在控制器中看到该值。从HTML表单传递对象以后将其绑定到模型时 - 您需要所有这些属性。但是:disabled => true
没有传递任何此类属性。
解决方法是使用:readonly => true
- 它将保护字段不被用户输入,它仍然会将param值传递回控制器,以便您可以将所有内容绑定到模型。
答案 1 :(得分:6)
我相信你只是传递:disabled => true
。根据我的经验,选项“只适用于”simple_form。所以在你的情况下:
<% @quote.test_items.each do |t| %>
<%= f.association :test_items, :label => false, :disabled => true, :selected => t.id %>
<% end %>
也可以给SimpleForm赋予:disabled选项,它会自动将包装器标记为使用css类禁用,因此您也可以在包装器中设置标签,提示和其他组件的样式。
答案 2 :(得分:3)
上面的答案都错了。
disabled属性的行为与readonly不同。
阅读并比较它们:
http://www.w3schools.com/tags/att_input_disabled.asp
提示:不会提交表单中的已禁用元素。
http://www.w3schools.com/tags/att_input_readonly.asp
正确的答案是使用
:readonly => true
类似的东西:
<%= f.association :test_items, :label => false, :readonly => true, :selected => t.id %>
答案 3 :(得分:2)
我不清楚关联方法是否接受HTML选项,但如果确实如此,您可以传递disabled: 'disable'
以使其具有固定值的只读。
我认为您可以通过将关联作为块来选择固定值,如关联文档中所示:
f.association :company do |c|
c.input :name, selected: 'selection'
c.input :type
end
关于整个列表是否只能读取并且仍然是下拉列表,我从谷歌看到的唯一解决方案涉及JS,例如:
http://techeyes.blogspot.com/2007/11/making-html-select-readonly.html
答案 4 :(得分:1)
是的,@ gk0r说的是documented here:
注意:HTML
选项disabled
,readonly
和multiple
都可以视为布尔值。因此,指定:disabled => true
将提供disabled="disabled"
。
* disabled的行为与readonly略有不同。