2

我在 Ruby on Rails 应用程序中使用 ActiveScaffold,并用使用 CSS 的图标替换了表中的默认“操作”文本(即“编辑”、“删除”、“显示”)。我还使用 action_link.add(“移动”和“复制”)添加了几个自定义操作。

为清楚起见,我希望图标以不同的顺序显示。具体来说,我希望“编辑”成为显示的第一个图标。

我似乎可以通过更改控制器中的定义顺序来更改 action_links 的顺序。我还能够通过首先 config.actions.排除所有内容,然后使用 config.actions.add 以特定顺序添加它们来更改默认操作的顺序。

但是,我的自定义操作似乎总是出现在列表中的默认操作之前

理想情况下,我希望他们显示“编辑”“复制”“移动”“删除”(即 - 内置、自定义、自定义、内置)。谁能建议我如何做到这一点?

我的一个想法是将“编辑”重新定义为自定义操作(使用默认功能),但我也不知道如何去做。

4

1 回答 1

1

警告:我不知道ActiveScaffold。这个答案是基于我阅读它的源代码。

看起来该action_links变量是一个自定义数据结构,称为ActionLinks. 它定义在ActiveScaffold::DataStructures.

在内部,它有一个@set变量,它根本不是 a Set,而是一个ArrayActionLinks有一个add, delete, 和each方法作为这个@set变量的看门人。

显示链接时,ActiveScaffold会执行此操作(在 中_list_actions.rhtml):

<% active_scaffold_config.action_links.each :record do |link| -%>
  # Displays the link (code removed for brevity)
<% end -%>

因此,除了扩展ActiveScaffold::DataStructures::ActionLinks以添加一种方法以@set不同方式对值进行排序之外,似乎没有办法做到这一点,至少一般情况下没有。

如果我是你,我会添加一个名为 的东西order_by!,你可以在其中传递一个符号数组,按照正确的顺序,它会使用@set. 这样,您可以在添加自定义操作后调用它。

于 2008-09-13T18:20:28.310 回答