我在Ruby on Rails应用程序中使用ActiveScaffold,并使用CSS替换了表格中的默认“操作”文本(即“编辑”,“删除”,“显示”)。我还在action_link.add(“move”和“copy”)中添加了一些自定义操作。
为清楚起见,我希望图标以不同的顺序显示。具体来说,我希望“编辑”成为第一个显示的图标。
我似乎可以通过更改控制器中的定义顺序来更改action_links的顺序。我还能够通过第一个config.actions.excluding所有内容来更改默认操作的顺序,然后按特定顺序将它们与config.actions.add一起添加。
但是,我的自定义操作似乎总是在列表中的默认操作之前出现。
理想情况下,我希望他们显示“编辑”“复制”“移动”“删除”(即 - 内置,自定义,自定义,内置)。谁能建议我怎么做?
我的一个想法是将“编辑”重新定义为自定义操作(使用默认功能),但我不知道如何解决这个问题。
答案 0 :(得分:1)
警告:我不知道 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
。这样,您可以在添加完自定义操作后调用它。