我有一个包含多个控制器的Rails应用程序(用于我网站的不同页面)。一个用于常规文本页面的控制器,另一个用于图库等。现在,我需要的是所有页面的可排序菜单。
我创建了一个名为MenuItems
的模型,它具有位置编号和与所有需要排序的模型的多态关联:
class MenuItem < ActiveRecord::Base
belongs_to :sortable, :polymorphic => true
end
问题是某些MenuItem应该指向相关的模型实例本身(如常规文本页面的show
动作),这里我的关联就可以了。但我还需要在菜单上列出index
个动作(如图库列表页面),并实现我需要在模型和控制器中编写一些复杂且不清晰的逻辑,或者为其添加另一个字段url
,为管理员提供某种界面来填充这些网址。
它已经看起来很笨拙了,根据我的经验,如果你用复杂的方式做某事,你做错了。但最好的方法是什么?您通常如何处理应用程序中的复杂菜单?
答案 0 :(得分:0)
我实际上并不介意MenuItem
方法 - 这是一个很大的功能,你显然不应该担心你现有的模型。然后我会给MenuItem
一些逻辑来计算它应该指向的URL:
def url
case sortable
when Picture
# ...
when Gallery
# ...
end
end
MenuItem
模型了解所有这些其他模型并不理想,因此您可以考虑将此逻辑放在辅助/装饰器中。