Ruby “如果账户活动[年度]”&&;会计活动[年][月]`平均数?

Ruby “如果账户活动[年度]”&&;会计活动[年][月]`平均数?,ruby,haml,Ruby,Haml,我试图理解一行代码,这行代码是由不再在场的人编写的: -如果账户活动[年]&账户活动[年][月] 它用于以下上下文: %tbody - x = (@today.year == year) ? @today.month : 12 - x.downto(1) do |month| %tr - if month == x %td{rowspan: x}= year %td= Date::MONTHNAMES[month] -

我试图理解一行代码,这行代码是由不再在场的人编写的:

-如果账户活动[年]&账户活动[年][月]

它用于以下上下文:

    %tbody
  - x = (@today.year == year) ? @today.month : 12
  - x.downto(1) do |month|
    %tr
      - if month == x
        %td{rowspan: x}= year
      %td= Date::MONTHNAMES[month]
      - @customer.accounts.each do |acct|
        - if acct.activity[year] && acct.activity[year][month]
          %td{'data-transactions' => acct.activity[year][month]}
            - stmt = acct.statement(year, month)
            = link_to 'View', url(:statements, :show, id: stmt.to_s)
            = link_to image_tag('/icons/document-pdf.png', alt: 'Download PDF'), url(:statements, :show, id: stmt, format: :pdf), class: :pdf
        - else
          %td
此代码的目的是按月份和年份显示财务报表。奇怪的是,我可以在控制台中输出数据,它采用这种形式

{10=>1}
1
{3=>2}
2
{6=>1}
1
{6=>1, 9=>1}
1
{7=>2}
2
{3=>1}
1
{2=>1}
1
{2=>1, 4=>1}
1
{2=>1, 4=>1, 8=>2}
2
{4=>1}
1
{4=>1, 5=>1}
1
{4=>1, 5=>1, 6=>1}
1
{4=>1, 5=>1, 6=>1, 7=>14}
14
它在那里,但由于某种原因,它没有被归还。我们在对存储过程使用db调用时,它可以工作,但是我们正在将项目改为使用API和HTTP调用,从那时起它就不工作了。以下是在控制台中声明和生成上述内容的位置:

@activity = {}
@activity = response['AccountActivity'].map do |row|
  @activity[row['year']] = {} unless @activity[row['year']]
  @activity[row['year']][row['month']] = row['transactions']
  puts @activity[row['year']]
  puts @activity[row['year']][row['month']]
end

看起来
acct.activity
将返回一个散列。如果您刚刚执行了
acct.activity[year][month]
,并且
acct.activity[year]
为零,那么您将执行
nil[month]
,这将导致错误


和&
是逻辑和的,因此如果
账户活动[年度]
为零,那么整个测试将只返回零,而不是错误。因此,它是一种简单的安全机制,用于在您不确定散列中将包含什么内容时使用。

鉴于
acct.activity()
返回嵌套的“散列”,它通常用于检查返回的
散列是否包含预期的条目

a = { :a => {}, :b => { :c => 2 } }

a[:a] && a[:a][:x] ? true : false
# => false
a[:b] && a[:b][:c] ? true : false
# => true

所以,我提到的这行,是不是意味着,如果AcctActudio [Acv]是空的,AcctActual[年] [No]是“NIL”,那么接下来要打印出一个空白的TD(删除TD中的代码位,因为我试图测试包含的内容。抱歉,这个注释是很难阅读的)。这意味着,基本上,如果有一个“truthy”。(在ruby中,除了
nil
false
)之外的所有内容都是
acct.activity[year][month]
的值,然后使用链接等执行第一段代码。否则,执行td中仅打印
acct.activity[year]
部分(可能为空,导致空字符串)抱歉。我发现现在很难读。如果是这样的话,我的数据在控制台中返回,为什么条件语句只输出空白行。看起来真的是什么?给出了什么?你不说你在控制台里做什么。如果你不确定视图中发生了什么,那么放一些日志记录。在那里调试的价值观,例如
谢谢。会做的,并返回给你。