Проблема с созданием формы для вставки информации в разные таблицы - PullRequest
0 голосов
/ 09 марта 2011

Я в значительной степени новичок в Rails, сейчас занимаюсь разработкой довольно сложного веб-приложения на Rails 2.2 .

Итак, в этом веб-приложении есть "фабрики". Не шаблон дизайна, заметьте, фактические фабрики (это игра).

Для каждой фабрики в команде игрока есть несколько вариантов, которые он может выбрать.

  • Уровень обслуживания для машин
  • Награды для работников
  • и т.д.

У меня есть две проблемы с этим:

  1. Это все флажки, и флажок должен быть установлен по умолчанию с ответом, уже сохраненным в БД. Я имею в виду, что чек должен быть уже в коробке, если игрок уже проверил его (извините, если этот отрывок сбивает с толку).
  2. Эта информация хранится в нескольких таблицах. Уровень обслуживания на заводе сохраняется в одной таблице, а бонус производительности, предоставляемый работникам, - в другой.

Может кто-нибудь помочь мне с этим? Это все над моей головой.

Спасибо всем.

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Чтобы понять вопрос 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то же самое:

  1. Загрузите объекты в ваше: get действие.
  2. Визуализация формы с вложенными объектами.
  3. Сохранение параметров для каждого объекта.

Существует несколько способов сделать это для форм с несколькими объектами.Я предлагаю вам ознакомиться с различными учебными пособиями, перечисленными в пункте 8, «Создание сложных форм», в Руководстве по рельсам .

Два последних момента, которые следует учитывать:

  • Делаете ли выдействительно нужны эти дополнительные таблицы?Если каждая строка обслуживания содержит атрибуты для одной фабрики, возможно, имеет смысл просто поместить атрибуты в таблицу фабрики и упростить ваши формы и действия.
  • Такие атрибуты, как: maintenance_level, могут быть более подходящим образом представлены в виде: тип строки с кнопкой радио в форме для установки уровня.
1 голос
/ 09 марта 2011

если дочерние объекты (уровень обслуживания, производительность и т. Д.) Связаны с Фабрикой, то вы можете использовать вложенные формы моделей.

Здесь вы можете проверить некоторую информацию о вложенных формах или просто Google "вложенные рельсы форм", и вы получите множество сообщений в блогах и учебных пособий.

- РЕДАКТИРОВАТЬ Видя, что вы добавили, что вы используете rails 2.2, вы можете попробовать simple_forms или formtastic для создания вложенных форм (это всего лишь предложение, так как я понятия не имею, работает ли оно).И я могу только установить значения вручную, чтобы обновить модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...