复杂轨道应用程序的可排序菜单

时间:2013-05-03 12:32:41

标签: ruby-on-rails rails-activerecord

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

我创建了一个名为MenuItems的模型,它具有位置编号和与所有需要排序的模型的多态关联:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

MenuItem模型了解所有这些其他模型并不理想,因此您可以考虑将此逻辑放在辅助/装饰器中。