也许有人知道一种方法,可以制作一个动态隐藏/显示过滤器操作链接,该链接在点击时更改,而无需编写任何javascript或创建部分,只需使用控制器和助手。
因此,与其有两个按钮:
config.action_links.add :index, :label=>"Hide", :parameters => {:cancelled => false}, :position => false
config.action_links.add :index, :label=>"Show", :parameters => {}, :position => false
如果有一个动态按钮可以在点击时从隐藏-显示更改,那将是非常棒的
重要的一点是,当您更改链接时,即使使用:dynamic_parameters属性,它们也不会被重新渲染,除非您指定
config.list.refresh_with_header = true
在您的配置中。一旦你做到了,它只是代码。
在我的情况下,我有一个记录列表,其中包含可选的附加文件。我想在显示所有记录的列表和只显示带有附件的记录之间切换。我有一个布尔参数:with_attachments
,它是'0'
或'1'
。
动作链接看起来像
config.action_links.add :index, label: 'Show All', parameters: { with_attachments: '0' }, position: false
config.action_links.add :index, label: 'Attachment Only', parameters: { with_attachments: '1' }, position: false
config.list.refresh_with_header = true # Refresh action buttons!
index方法将hidden
标记应用于当前选定的选项。
def index
current = params[:with_attachments] || '0'
active_scaffold_config.action_links.each do |link|
# For :index actions (filtering the list)
if link.action == :index
# hide the one that would refresh with the current parameter value
link.html_options[:hidden] = (link.parameters[:with_attachments] == current)
end
end
super
end
还有CSS使隐藏的动作不可见
.active-scaffold-header .actions a[hidden=hidden] {
display: none;
}
你可能只需要一个按钮和:dynamic_parameters就可以做到这一点,但由于我有通过CSS附加的图标(为了简单起见,省略了),这个解决方案对我来说不起作用