Обновление 2-мерной формы - PullRequest
       15

Обновление 2-мерной формы

0 голосов
/ 23 октября 2009

Привет, ребята. Я новичок в разработке рельсов и ударил немного стены. Приложение, над которым я работаю, является решением для планирования, которое требует обновления модели соединения, но не простым способом 1: 1.

Приложение выложено следующим образом:

class Route < ActiveRecord::Base
  has_many :markers, :foreign_key => 'source_id'  
  has_many :schedules

  accepts_nested_attributes_for :markers, :allow_destroy => true, :reject_if => proc { |a| a['name'].blank? }
  accepts_nested_attributes_for :schedules, :allow_destroy => true, :reject_if => proc { |a| a['name'].blank? }
end

class Schedule < ActiveRecord::Base  
  has_many :arrivals
  has_many :markers, :through => :arrivals

  accepts_nested_attributes_for :arrivals, :allow_destroy => true, :reject_if => :all_blank
end

class Marker < ActiveRecord::Base  
  has_many :arrivals
  has_many :schedules, :through => :arrivals
end

class Arrival < ActiveRecord::Base
  belongs_to :marker
  belongs_to :schedule
end

... так что основное has_many: через ... или так я бы подумал: P

При создании маршрута вы можете создавать расписания 1..n и маркеры 1..n. Редактирование расписания должно позволить вам добавлять 1..n записи о прибытии для каждого маркера, определенного в маршруте. Это то, что вызывает у меня горе.

Благодаря магии ascii-art я хочу, чтобы приложение выглядело так:

/views/routes/edit.html.erb (works already)

ROUTE
-----
...

SCHEDULES
---------
[Add]

* Schedule 1 [Edit][Delete]
* Schedule 2 [Edit][Delete]
...

MARKERS
-------
[Add]

* Marker 1 [Edit][Delete]
* Marker 2 [Edit][Delete]
* Marker 3 [Edit][Delete]
* Marker 4 [Edit][Delete]
...

/views/schedules/edit.html.erb

SCHEDULE X
----------
[Add Col.]

Marker 1 [ ] [ ]
Marker 2 [ ] [ ]
Marker 3 [ ] [ ]
Marker 4 [ ] [ ]
         [x] [x]

(the [x] should remove a column)

РЕДАКТИРОВАТЬ (09 НОЯБРЯ):

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

Я думаю, что часть путаницы здесь (для меня и, возможно, для любого, кто мог бы помочь) состоит в том, что я не объяснил отношения должным образом.

  1. маркеров много прибытий
  2. расписания имеют много маркеров
  3. маршруты имеют много расписаний

Это основы.

Наличие формы для обновления поступлений для одиночного маркера не составит труда, так как это базовая форма. Я надеюсь предоставить форму для одновременного обновления всех маркеров.

Когда вы нажимаете «Добавить запись», он должен добавить новое прибытие для каждого маркера , который доступен в данный момент. Под каждым «столбцом» должна быть кнопка «Удалить», которая будет удалять каждый приход для этого конкретного столбца (то есть с каждого маркера).

Я не уверен, что это прояснит это: P

1 Ответ

1 голос
/ 24 октября 2009

Когда вы создаете маршрут, вы можете создавать графики 1..n и 1..n маркеры. Редактирование расписания должно позволяют добавлять 1..n записи о прибытии для каждого маркера, определенного в маршруте. Это то, что вызывает у меня горе.

Нет ничего связывающего маркеры с маршрутами, что касается расписаний. То, как вы выложили вещи в любом расписании, может добавлять любое количество записей о прибытии для каждого маркера, определенного в вашей базе данных.

Вам нужно внести несколько изменений, чтобы получить желаемую функциональность. Я предполагаю, что расписание принадлежит к маршруту. Я также пропустил строки accepts_nested_attributes_for для экономии места.

class Route < ActiveRecord::Base
  has_many :markers, :foreign_key => 'source_id'  
  has_many :schedules
  ...
end

class Schedule < ActiveRecord::Base  
  has_many :arrivals
  belongs_to :route
  has_many :markers, :through => :arrivals
  has_many :route_markers, :through => :route, :source => :markers
  ...
end

class Marker < ActiveRecord::Base  
  has_many :arrivals
  has_many :schedules, :through => :arrivals
  ...
end

class Arrival < ActiveRecord::Base
  belongs_to :marker
  belongs_to :schedule
  ...
end

Теперь @schedule.route_markers возвращает список маркеров на маршруте, связанных с расписанием. Вы можете использовать их для создания вашей сетки. Затем создайте объекты прибытия, чтобы установить маркер в определенном расписании.

Тогда это всего лишь вопрос @schedule.markers= list_of_markers, и rails позаботится о создании / удалении записей в объединяемой таблице.

Извините, но не зная больше, я не собираюсь рассуждать о том, как будет выглядеть вид.

...