Чтобы понять вопрос 1, сделайте его простым и представьте, что атрибуты, к которым вы хотите получить доступ, находятся в таблице фабрики.Тогда шаблон проектирования довольно прост:
Схема базы данных:
create_table :factories do |t|
t.boolean :now_operating, :default => true, :null => false
...
Контроллер:
def edit
@factory = Factory.find(params[:id])
if request.post?
@factory.update_attributes(params[:factory])
end
end
Вид:
<% form_for :factory, @factory, :url => { :action => "edit" } do |f| %>
<%= f.checkbox :now_operating %>
...
Вы можетеДелайте это с меньшим количеством кода, фактически без кода, если вы используете ресурсы RESTful и соблюдаете соглашения о присвоении имен, но это слишком много волшебства, чтобы начать, потому что оно скрывает то, что rails делает для вас.
А именно: когда действие: get загружает объект, соответствующий имени объекта, переданному в form_for, rails заполняет поля формы значениями атрибутов этого объекта из базы данных.Затем, когда клиент отправляет форму, rails кодирует эти поля в запросе в качестве параметров для этого объекта, которые затем можно обновить в действии: post.Более подробное описание см. В официальном Rails Guide .
Я прошу прощения, если это было слишком базовым, но важно получить базовый шаблон, потому что общий подход к решению проблемы 2то же самое:
- Загрузите объекты в ваше: get действие.
- Визуализация формы с вложенными объектами.
- Сохранение параметров для каждого объекта.
Существует несколько способов сделать это для форм с несколькими объектами.Я предлагаю вам ознакомиться с различными учебными пособиями, перечисленными в пункте 8, «Создание сложных форм», в Руководстве по рельсам .
Два последних момента, которые следует учитывать:
- Делаете ли выдействительно нужны эти дополнительные таблицы?Если каждая строка обслуживания содержит атрибуты для одной фабрики, возможно, имеет смысл просто поместить атрибуты в таблицу фабрики и упростить ваши формы и действия.
- Такие атрибуты, как: maintenance_level, могут быть более подходящим образом представлены в виде: тип строки с кнопкой радио в форме для установки уровня.