1

これが基本的な質問である場合はご容赦ください。Rails (3.2 を使用) を学んでいます。

私のEventモデルhas_many images。各イメージにはis_primaryブール フィールドがあります。true に設定された画像、またはそうでない場合は最初の画像を返すメソッドEventが必要です。これは私のコードです:cover_imageis_primary

def cover_image
    imgs = self.images
    imgs.each { |i| return i if i.is_primary }
    # If no primary
    return imgs.first
  end

それを行うためのより良い方法があるように感じずにはいられません.1つを見つけるためだけにすべての要素をループする必要はありません.

4

1 に答える 1

4

スコープを使用すると、これを非常に簡単に行うことができます。

画像モデル

scope :primary, where(:is_primary => true)

イベントモデル

def cover_image
  images.primary.first
end

これは非常に基本的な例であり、少なくとも開始する必要があります。たとえば、不足しているプラ​​イマリ イメージを適切に処理するために構築する必要があります。

完全を期すために、これをスコープとして行う必要はありません。必要に応じ、where ステートメントを直接使用できます。スコープは、DRY を維持するのに非常に便利です。

イベントモデル

def cover_image
  images.where(:is_primary => true).first
end
于 2013-06-17T19:10:26.603 に答える