当前位置:  开发笔记 > 编程语言 > 正文

在Rails中获取STI类基类的路由

如何解决《在Rails中获取STI类基类的路由》经验,为你挑选了2个好方法。

假设我有一个带有3个模型的rails应用程序,Person,Place和Thing.假设Thing使用单表继承,因此有FancyThing和ScaryThing子类.然后有定义的路线map.resources :people, :places, :things.所以没有FancyThings和ScaryThings的控制器,ThingsController处理任何类型.

现在说我需要有代码,显示任何有链接的列表.如果我在我的视图中有这个代码:

<% @items.each do |item| %>
  <%= link_to item.name, item %>
<% end %>

如果item是Person或Place,则工作正常,polymorphic_path负责生成正确的路由.但是如果item是FancyThing或ScaryThing,这会爆炸,因为它会尝试使用fancy_thing_path,没有路由.我想以某种方式使它使用thing_path.理想情况下,Thing和/或其子类上会有一个方法以某种方式指示子类应该使用基类来生成路由.有一个优雅的解决方案吗?



1> Dave Ungerer..:

这样就可以了:

<% @items.map {|i| if i.class < Thing then i.becomes(Thing) else i end}.each do |item| %>
  <%= link_to item.name, item %>
<% end %>

这使用ActiveRecord函数"变成"来对Thing基类进行Thing的所有子类的"向上转换".



2> Kirschstein..:

尝试使用

map.resources :things
map.resources :fancy_things, :controller => 'things'
map.resources :scary_things, :controller => 'things'

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有