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

use*_*363 12 ruby-on-rails simple-form ruby-on-rails-3.1

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

  <% @quote.test_items.each do |t| %> 
    <%= f.association :test_items, :label => false, :selected => t.id %>
  <% end %>
Run Code Online (Sandbox Code Playgroud)

该应用程序使用simple_form.非常感谢.

gk0*_*k0r 41

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

基本问题是,如果使用:disabled => truesimple_form,则不会在控制器中看到该值.从HTML表单传递对象以后将其绑定到模型时 - 您需要所有这些属性.该:disabled => true但是没有通过任何这样的属性.

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

祝好运.

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

  • 这个答案与IMO问题最为相关.应该选择正确. (2认同)

Mat*_*ner 6

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

<% @quote.test_items.each do |t| %> 
  <%= f.association :test_items, :label => false, :disabled => true, :selected => t.id %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

来自simple_form github repo:

也可以给SimpleForm提供:disabled选项,它会自动将包装器标记为使用css类禁用,因此您也可以在包装器中设置标签,提示和其他组件的样式.


jor*_*npg 2

我不清楚关联方法是否接受 HTML 选项,但如果接受,您可以传递disabled: 'disable'一个固定值以使其只读。

我认为您可以通过将关联作为块传递来选择固定值,如关联文档中所示:

f.association :company do |c|
  c.input :name, selected: 'selection'
  c.input :type
end
Run Code Online (Sandbox Code Playgroud)

至于整个列表是否可以只读并且仍然下拉,我从google看到的唯一解决方案涉及JS,例如:

http://techeyes.blogspot.com/2007/11/making-html-select-readonly.html