2011-09-03 123 views
1

我正在使用Rails单表继承与超类内容和一些子类(如文章,评论等)我试图摆脱一个单一的控制器,我已经设置了路线正是如此:控制器/视图中的模型继承和模型特定的代码

resources :contents 
resources :articles, :controller => "contents" 
resources :comments, :controller => "contents" 

这样,/articles/new被路由到contents#new这似乎是我想要的。

但是,在控制器和视图中,我需要根据我正在处理的实际模型来调整功能。为此,我需要确定原始请求的资源或者找出我正在处理的哪个子类。

看看params对于/articles/new内的公共控制器给出{"action"=>"new", "controller"=>"contents"},这显然不提供我需要的信息。

要么答案是显而易见的,要么我使用模型继承错误。哪一个? :)

回答

0

您可以提取你有兴趣在这样

path = request.fullpath[%r{^/(articles|comments)/}, 1] # articles or comments 

请求路径的一部分。一旦你拥有了它,你可以得到的模型类这样的:

model_class = path.classify.constantize # Article or Comment 

最好成绩,

Richard

+0

非常感谢。进一步的调查表明,我也可以做 'resources:comments,:controller =>“contents”,:type =>“Comment”' 然后参考'params [:type]'。但是你的解决方案也符合这个法案,并且教会了我'classify'和'constantize'。谢谢! – Sami