0

我有一个助手接收一组附件集合并尝试计算图像是否为正方形。

在视图上,我有一个条件suggestion_grid_square?(@attachments),而辅助方法是。

(我已经简化了代码,让这个问题的问题更清楚)

  def suggestion_grid_square?(*attachments) 
    suggestion_column_squares?(1,attachments)
  end

  def attachment_square?(attachment)
    (attachment.file_height.to_f / attachment.file_width) <= 1
  end

  private

  def suggestion_column_squares?(column,*attachments)
    attachments.each do |attachment|
      attachment_square?(attachment)
    end
  end

以下代码向我返回此错误:undefined method file_height for #<Array:0x007fa827e9af30>

app/helpers/suggestions_helper.rb:8:in `attachment_square?' app/helpers/suggestions_helper.rb:15:in `block in suggestion_column_squares?'

知道为什么它没有收到该file_height属性或我在这里做错了什么吗?

更新这是我创建集合的方式以及我在视图上调用助手的方式:

boutique_products = Product.by_most_recent.sold_or_designed_by(boutique).shuffle.first(4)
boutique_products.each { |product| (@attachments << product.default_attachment_or_first_attachment) } 

.follow-boutique-grid{class: ("square-suggestion-grid" if suggestion_grid_square?(@attachments)) }
4

1 回答 1

2

suggestion_grid_square?中,附件已经是来自 splat 参数 (*attachments) 的数组。然后你将它传递给suggestion_column_squares?which 再次引发争论。但是由于附件已经是一个数组,所以 splat 只会创建一个数组的数组。因此,您的附件变量内部suggestion_column_squares?看起来像:

[[attachment1, attachment2, etc...]]

当您调用 时each,您实际上只是在外部元素循环 1 次并传入一个数组。这就是为什么在调用file_height数组时会出错的原因,因为attachment(在 each 中)不是您所期望的。

您应该从以下附件参数中删除 splat 运算符 (*) suggestion_column_squares?

def suggestion_column_squares?(column, attachments)
  attachments.each do |attachment|
    attachment_square?(attachment)
  end
end
于 2013-04-02T22:21:46.153 回答