Rails повторно использует вид формы при редактировании, но устанавливает некоторые поля только для чтения - PullRequest
5 голосов
/ 30 апреля 2010

У меня есть модель, в которой пользователю не разрешено обновлять большинство полей после первоначального создания.

Я видел атрибут :readonly HTML, который я могу прикрепить ко всем помощникам полей, но выполнение условий для всех полей кажется ... icky.

В настоящее время я не использую ничего особенного для создания своих форм, просто HAML. Кто-нибудь знает лучший способ сделать это?

Это то, о чем я думал до сих пор:

def set_readonly?(object, html_attr)
  html_attr.merge(object.new_record? ? {} : {:readonly => 'readonly'})
end

Используется как:

f.text_field :supplier_id, set_readonly?(@damaged_goods, {:size => 5})

Решением, заставляющим меня пускать слюни, будет способ установить атрибут только для чтения на модели вместе с Конечным автоматом , который затем будет распространяться на представления. :)

Ответы [ 2 ]

4 голосов
/ 28 октября 2014

Вот один из способов отключить поле <INPUT> без дублирования помощника по форме в ваших new и edit представлениях:

f.text_field :supplier_id, readonly: f.object.persisted?
0 голосов
/ 25 мая 2010

Использование attr_protected (из Билл Эйзенхауэр ).

1-й результат поиска в Google rails constants.

...