假设我有一个数组块,对于每个值,我打印或不打印基于某些标准的内容。
<% @friends.each do |friend| %>
<% if friend.status.best = true %>
<%= friend.name %>
<% end %>
<% end %>
如果打印了至少一个值,我想要一个标题,如下所示:
BEST FRIENDS
friend1
friend2
etc
但如果最终没有打印出任何值,我根本不需要任何标题。
这是我试过的:
如果我在块条件中设置了一些变量@v
,
<% if friend.status.best = true %>
<%= friend.name %>
<% @v = true %>
<% end %>
然后我可以使用if @v
条件来打印标题,但问题是标题应该在块之前打印。
我想到使用if @v
条件来用javascript填充标题,但有时不是瞬间的,我希望标题立即就在那里。
有人有任何建议吗?
答案 0 :(得分:0)
试试这个:
browser.open("http://192.168.1.1/bbox-maintenance.lp")
browser.select_form(nr = 0)
browser.form.find_control("main_reboot").readonly = False
browser.form['main_reboot'] = "1"
browser.submit()
答案 1 :(得分:0)
您可以使用Enumerable#any?
快速确定是否有最好的朋友。
IF OBJECT_ID(N'tempdb..#T', 'U') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T
(
[Date] DATE,
Business VARCHAR(50),
Value INT,
Name VARCHAR(50)
);
INSERT #T (Date, Business, Value, Name)
VALUES
('20150601', 'EUR', 1, 'Group 1'),
('20150605', 'EUR', 12, 'Group 2'),
('20150605', 'EUR', 3, 'Group 3'),
('20150701', 'EUR', 2, 'Group 1'),
('20150708', 'EUR', 2, 'Group 2'),
('20150702', 'EUR', 7, 'Group 3'),
('20150703', 'AAA', 2, 'Group 1');
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
DECLARE @start AS DATETIME
DECLARE @end AS DATETIME
DECLARE @business AS VARCHAR(50)
SET @start = '2015-01-01';
SET @end = '2015-12-01';
SET @business = 'EUR';
--Get distinct values of the PIVOT Column
SET @ColumnName =
STUFF(( SELECT ',' + QUOTENAME(CONVERT(VARCHAR(10), D.[Date], 120))
FROM ( SELECT [Date] = DATEADD(MONTH, DATEDIFF(MONTH, 0, [Date]), 0)
FROM #T
WHERE [Date] BETWEEN @start AND @end
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, [Date]), 0)
) AS d
ORDER BY d.[Date]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
SET @DynamicPivotQuery =
'SELECT Name, ' + @ColumnName + '
FROM ( SELECT SUM(bb.value) AS Value,
Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, bb.date), 0),
ISNULL(bb.name, ''Total'') AS Name
FROM #T AS bb
WHERE bb.date BETWEEN @StartParam AND @EndParam
AND bb.Business = @BusinessParam
GROUP BY GROUPING SETS ((bb.date, bb.name), (bb.Date))
) AS t
PIVOT
( SUM(t.value)
FOR date IN (' + @ColumnName + ')
) AS PVTTable;';
EXECUTE sp_executesql
@DynamicPivotQuery,
N'@StartParam DATETIME, @EndParam DATETIME, @BusinessParam VARCHAR(50)',
@StartParam = @Start,
@EndParam = @End,
@BusinessParam = @Business;
另请注意,您的代码中存在错误。您将值true分配给最佳属性:
<% if @friends.any? { |friend| friend.status.best } %>
# The header
<% end %>
这将导致循环始终返回true并打印出名称。您要做的是将<% if friend.status.best = true %>
<%= friend.name %>
<% end %>
替换为=
==
或只是
<% if friend.status.best == true %>
<%= friend.name %>
<% end %>
回到最初的问题,如果项目数量很大,<% if friend.status.best %>
<%= friend.name %>
<% end %>
的方法有点效率低,因为你需要将集合循环两次。此外,当你真正想要的东西(至少从你发布的片段中)显示最好的朋友时,你正在迭代整个#any?
集合。
您可能希望更改查询,以便@friends
仅包含最好的朋友(@friends
为best
的那些记录)。通过这种方式,您可以简单地检查集合中是否存在值。