如何更改ActiveScaffold"动作"的显示顺序?

时间:2020-03-05 18:52:17  来源:igfitidea点击:

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

为了清楚起见,我希望图标的显示顺序与实际顺序不同。具体来说,我希望"编辑"成为显示的第一个图标。

我似乎能够通过更改控制器中定义的顺序来更改action_links的顺序。我还能够通过以下方式来更改默认操作的顺序:首先config.actions。排除所有内容,然后以特定顺序将它们与config.actions.add添加在一起。

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

理想情况下,我希望他们显示"编辑","复制","移动","删除"(即内置,自定义,自定义,内置)。谁能建议我该怎么做?

我曾经有一个想法是将"编辑"重新定义为自定义操作(具有默认功能),但是我也不知道该怎么做。

解决方案

回答

警告:我不知道ActiveScaffold。该答案基于我阅读的源代码。

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

在内部,它具有一个" @set"变量,它根本不是一个" Set",而是一个" Array"。 ActionLinks有一个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。这样,我们就可以在添加自定义操作后调用它。