Как установить поле только для чтения в rails 3.1.0 views? - PullRequest
12 голосов
/ 03 февраля 2012

У меня вопрос, как установить поле в рельсах только для чтения.Ниже приведено поле выбора в контроллере котировок.Пользователи не могут изменять выбор.

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

Приложение использует simple_form.Большое спасибо.

Ответы [ 5 ]

41 голосов
/ 10 августа 2012

Я столкнулся с подобной проблемой, к счастью, есть простое решение.

Основная проблема заключается в том, что если вы используете :disabled => true с simple_form, вы не увидите это значение в контроллере.Когда вы передаете объект из формы HTML, чтобы позже связать его с моделью - вам нужны все эти атрибуты.Однако :disabled => true не передает ни одного такого атрибута.

Решением этого является использование :readonly => true - оно защитит поле от ввода пользователя и все равно передаст значение параметра обратно контроллеру, такВы можете привязать все к своей модели.

Удачи.

См. https://github.com/plataformatec/simple_form/pull/367

6 голосов
/ 03 февраля 2012

Полагаю, вы просто сдадите :disabled => true.По моему опыту, опции просто работают с simple_form.Итак, в вашем случае:

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

Из репозитория github simple_form :

Также можно назначить опцию: disabled SimpleForm, и она автоматическипометьте оболочку как отключенную с помощью класса css, чтобы вы могли стилизовать надписи, подсказки и другие компоненты внутри оболочки.

3 голосов
/ 27 апреля 2014

Все приведенные выше ответы неверны.

отключенный атрибут имеет поведение, отличное от только для чтения.

прочитайте и сравните их:

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 %>
2 голосов
/ 03 февраля 2012

Мне не ясно, принимает ли метод ассоциации параметры HTML или нет, но если это так, вы можете передать disabled: 'disable', чтобы сделать его доступным только для чтения с фиксированным значением.

Я думаю, что вы могли бы выбрать фиксированное значение, передавая ассоциацию как блок, как показано в документации ассоциации:

f.association :company do |c|
  c.input :name, selected: 'selection'
  c.input :type
end

Что касается того, может ли весь список быть доступным только для чтения и все еще раскрывающимся, единственные решения, которые я вижу в Google, включают JS, например:

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

1 голос
/ 19 августа 2012

Да, то, что сказал @ gk0r, поскольку это задокументировано здесь :

ПРИМЕЧАНИЕ. HTML опции disabled, readonly и multiple могутрассматривается как логическое значение.Таким образом, указание :disabled => true даст disabled="disabled".

* отключено, поведение будет немного отличаться от readonly.

...