用于复杂rails应用程序的可排序菜单



我有一个包含几个控制器的Rails应用程序(用于我网站的不同页面)。一个控制器用于常规文本页面,一个单独的画廊等。现在,我需要的是一个可排序的菜单为我所有的页面。

我已经创建了一个叫做MenuItems的模型,它有一个位置号和多态关联到所有需要排序的模型:

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

问题是,一些菜单项应该指向相关的模型实例本身(如常规文本页面的show动作),这里我的关联将做的伎俩。但是我还需要在我的菜单上列出index动作(如画廊列表页面),为了实现这一点,我需要在模型和控制器中编写一些复杂和不清楚的逻辑,或者为url添加另一个字段,为管理员提供某种接口来填充这些url。

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

我实际上并不介意MenuItem方法——这是一个很大的功能,你显然不应该担心你现有的模型。然后,我会给MenuItem一些逻辑来计算出它应该指向的URL:

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

MenuItem模型知道所有这些其他模型是不理想的,因此您可以考虑将此逻辑放在helper/decorator中。

最新更新