该应用程序的布局如下:
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)
编辑(09NOV04):
我删除了原先发布的不完整的视图代码,但想稍微更新一下这个问题。
我认为这里的一些混乱(对我自己,可能对任何可能提供帮助的人而言)是我没有正确解释这些关系。
这是基础。
拥有一个可以更新单个标记到达的表单并不困难,因为这是一个基本形式。我希望做的是提供一个同时更新所有标记的表单。
当您点击“添加条目”时,它应该为当前可用的每个标记添加新的。在每个“列”下,应该有一个“删除”按钮,它将删除该特定列的每个到达(因此从每个标记)。
我不确定是否会将其清除:P
答案 0 :(得分:1)
创建路线时,您可以 创建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负责在连接表中创建/删除条目。
很抱歉,但不知道更多,我不会推测视图会是什么样的。