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?、attachments は既に splat 引数 (*attachments) からの配列です。次に、それを に渡しsuggestion_column_squares?ます。これにより、引数が再び飛び散ります。しかし、添付ファイルは既に配列であるため、splat は単に配列の配列を作成します。したがって、内部の添付ファイル変数はsuggestion_column_squares?次のようになります。

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

を呼び出すとeach、実際には外側の要素を 1 回ループして配列を渡すだけです。file_heightこれが、配列の呼び出しに関するエラーが発生する理由です。これは、 attachment(each 内で) 期待するものではないためです。

次の添付ファイル パラメータからスプラット演算子 (*) を削除する必要がありますsuggestion_column_squares?

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