2013-05-03 50 views
0

我有一个Rails应用程序,它包含多个控制器(用于我的网站的不同页面)。一个普通文本页面的控制器,单独用于图库等。现在,我需要的是我的所有页面的可排序菜单。复杂导轨应用程序的可排序菜单

我创建的模型称为MenuItems,其中有一个位置,数量和多态关联到所有需要排序的模型:

class MenuItem < ActiveRecord::Base 
    belongs_to :sortable, :polymorphic => true 
end 

问题是,一些的MenuItems的应指向相关模型实例本身(例如show常规文本页面的动作),在这里我的关联将执行此操作。但我还需要在菜单中列出index动作(如图库列表页面),并且要实现这一点,我需要在模型和控制器中编写一些复杂和不清晰的逻辑,或者为url添加另一个字段,管理员填充这些网址的一种界面。

它看起来很笨拙,从我的经验来看,如果你用复杂的方式在rails中做某些事情,那么你做错了。但是最好的办法是什么?您通常如何处理应用程序中的复杂菜单?

回答

0

我其实不介意MenuItem的方法 - 这是一个很大的功能,你显然不应该担心你现有的模型。然后我会给MenuItem一些逻辑来解决URL应该指向:

def url 
    case sortable 
    when Picture 
    # ... 
    when Gallery 
    # ... 
    end 
end 

这不是理想的MenuItem模型知道所有这些其他车型,所以你可以考虑把这个逻辑在助手/装饰。