2011-01-12 43 views
0

我继承了一个Rails项目,并正与如何应对某种情况战斗我怎么能有2个资源共享轨道控制器

比方说,我有2个不同的类/数据库表:

vinyl records 
compact discs 

每个表中每个项目都有自己的项目ID和一个唯一的全局标识符

例如:

vinyl a -- vinyl.1 guid.100 
vinyl b -- vinyl.2 guid.200 
cd a -- cd.1 guid.300 
cd b -- cd.2 guid.400 

这让我有很好的宁静的网址,如:

/vinyls/1 
/cds/1 

不幸的是,我们不希望出现这种情况是URL结构。结构应该是

/recordings/100 
/recordings/300 

我很难搞清楚如何合并所有这一切。

我第一次尝试有我做以下内容:通过CDS控制器

  1. 管一切
  2. 试图找到CD,如果我失败了 - 试图找到乙烯基
  3. ,如果我找到乙烯,乙烯渲染/显示

,几乎效果很好 - 问题是,我们的谐音靠“资源”相当多,而我似乎无法找出如何改变,对的意见。

有没有人有关于如何进行的建议?我对任何事情都很开放。

回答

2

没有关于控制器说它必须绑定到模型,你可以简单地有一个RecordingsController。这就是说,试图处理不同的模型不会那么简单。

如果CD和乙烯具有非常相似的列,您可以尝试单表继承。请参阅此页上的单表继承部分:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

我不确定您在视图上的问题是什么;你能解释一下吗?

+0

代码中有些东西可能在rails中设置了“resource”的本地值。我一直无法弄清楚如何重写。有很多偏见,包括依赖于各种观点中的“资源” - 所以这将是一个重写aorund的巨大承诺。 – 2011-01-12 18:31:56

1

这里有两个表的事实是一个问题。我建议迁移数据库以使用单表继承,其中你有一个recordings表,VinylCd类比从Recording继承。然后你可以有一个recordings_controller.rb和两个类型的每个类型的附加控制器。您需要添加type列以获得STI魔术。