【发布时间】:2009-10-23 18:06:29
【问题描述】:
大家好。我是 Rails 开发的新手,并且遇到了一些障碍。我正在开发的应用程序是一个调度解决方案,它需要更新连接模型,但不是以简单的 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 :through ... 或者我认为 :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)
编辑(2004 年 11 月 9 日):
我已经删除了我最初发布的不完整的视图代码,但想稍微更新一下问题。
我认为这里的部分困惑(对于我自己,也可能对于任何可能提供帮助的人)是我没有正确解释这些关系。
- 标记有很多到达
- 时间表有很多标记
- 路线有很多时刻表
这是基础。
拥有一个可以为单个标记更新到达的表单并不难,因为这是一个基本表单。我希望做的是提供一个同时更新所有标记的表单。
当您单击“添加条目”时,它应该为当前可用的每个标记添加一个新到达。在每个“列”下,应该有一个“删除”按钮,它将删除该特定列的每个到达(因此从每个标记中)。
我不确定这是否可以解决任何问题:P
【问题讨论】:
标签: ruby-on-rails forms associations