Эти проблемы возникают из-за двух ошибок Rails Admin, IMO.
Полезно понять, что Rails Admin имеет два типа форм для ассоциации. Один из них классический (открывает окно для создания), а другой - это «nested_form», который отображает форму на странице. Параметр nested_form
может быть изменен напрямую, как показано в вопросе выше, но с помощью Rails Admin автоматически устанавливается значение true для ассоциаций, включенных в accepts_nested_attributes_for
.
Первая ошибка заключается в том, что accepts_nested_attributes_for: ..., update_only: true
«интерпретируется» рельсами Admin как «Я не хочу давать параметры при создании». Эта интерпретация кажется wrong, так как поведение, которое изменяется в рельсах, касается исключительно обновлений объектов и не предотвращает передачу параметров вложенности при создании. Более того, я ожидал бы возврата к классической форме вместо полностью отключенной формы.
Быстрый и обычно вредный способ исправить это, чтобы изменить update_only
по умолчанию false
.
Вторая ошибка более удивительна, потому что «на вашем лице». Поскольку , классические (не вложенные) формы ассоциации для отношений has_one
не получают инициализацию должным образом, если вы не укажете себе идентификаторы и геттеры. Таким образом, если у вас нет nested_attributes, вам необходимо включить линии как таковой в модели:
class Visit < ActiveRecord::Base
has_one :mri, dependent: :destroy, inverse_of: :visit
def mri_id
self.mri.try :id
end
def mri_id=(id)
self.mri = Mri.find_by_id(id)
end
...
end
Наконец, используя наше понимание первой ошибки дала нам самое элегантное решение моей исходной задачи. Шаблоны администратора Rails source code показывают, что Rails Admin хранит параметр update_only
для атрибута nested_form
объекта поля. Мы можем непосредственно настроить его для того, чтобы достичь желаемого поведения (которое должно быть по умолчанию имо):
config.model Visit do
edit do
configure :mri do
nested_form[:update_only] = false
end
end
end
PS: Это сообщение является довольно долго, но это просто проблема в конечном итоге чеканка вниз кролика отверстие, так что я хотел поделиться своими выводами - надеюсь, это поможет. Огромное спасибо разработчикам RA, которые предоставляют Rails один из самых универсальных и многофункциональных админ-портала (когда-либо). Я открыл acouple вопросов о gh.