2008-09-12 20 views
2

我在Ruby on Rails应用程序中使用ActiveScaffold,并使用CSS替换了表中的默认“动作”文本(即“编辑”,“删除”,“显示”)图标。我还用action_link.add(“move”和“copy”)添加了一些自定义操作。如何更改ActiveScaffold“操作”的显示顺序?

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

我似乎能够通过改变控制器中的定义顺序来改变action_links的顺序。我还能够通过首先config.actions.excluding所有内容来改变默认动作的顺序,然后以特定的顺序将它们与config.actions.add一起添加。

不过,我的自定义操作似乎总是出现之前的默认操作在列表中。理想情况下,我希望他们显示“编辑”,“复制”,“移动”,“删除”(即 - 内置的,自定义的,自定义的,内置的)。任何人都可以建议我如何做到这一点?

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

回答

1

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

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

它在内部具有@set变量,它根本不是Set,而是ArrayActionLinks有一个adddeleteeach方法作为此@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。这样,您可以在完成添加自定义操作后调用它。