如何在rails 3.1.0视图中设置只读字段?

时间:2012-02-02 22:22:37

标签: ruby-on-rails ruby-on-rails-3.1 simple-form

我的问题是如何设置只读的rails形式的字段。以下是引号控制器中的选择框。用户不允许更改选择。

  <% @quote.test_items.each do |t| %> 
    <%= f.association :test_items, :label => false, :selected => t.id %>
  <% end %>

该应用使用simple_form。非常感谢。

5 个答案:

答案 0 :(得分:41)

我遇到了类似的问题,谢天谢地,有一个简单的解决方案。

基本问题是,如果您使用带有simple_form的:disabled => true,您将无法在控制器中看到该值。从HTML表单传递对象以后将其绑定到模型时 - 您需要所有这些属性。但是:disabled => true没有传递任何此类属性。

解决方法是使用:readonly => true - 它将保护字段不被用户输入,它仍然会将param值传递回控制器,以便您可以将所有内容绑定到模型。

祝你好运。

请参阅https://github.com/plataformatec/simple_form/pull/367

答案 1 :(得分:6)

我相信你只是传递:disabled => true。根据我的经验,选项“只适用于”simple_form。所以在你的情况下:

<% @quote.test_items.each do |t| %> 
  <%= f.association :test_items, :label => false, :disabled => true, :selected => t.id %>
<% end %>

来自simple_form github repo

也可以给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选项disabledreadonlymultiple都可以视为布尔值。因此,指定:disabled => true将提供disabled="disabled"

* disabled的行为与readonly略有不同。