0

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

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

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

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

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

4

1 回答 1

0

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

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

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

于 2013-05-03T13:50:47.010 回答