0

私のアプリケーションには、さまざまなクラスにポリモーフィックに関連付けられた Image クラスがあります。これらのオブジェクトにはそれぞれ一連の画像があり、そのうちの 1 つを主役の画像として設定できるようにしたいと考えています。

そのため、Image クラスにフィールドを追加し、is_featuredこのフィールドを true に設定して、関連付けられたオブジェクトごとに 1 つの画像のみが存在するようにしたいと考えました。

だから私がしようとしていたのは、このフィールドのセッターメソッドをオーバーライドすることです。これは私がこれまでに得たものですが、機能しません (残りのis_featuredフィールドを に設定しませんfalse):

def is_featured=(is_featured_value)
  if is_featured_value == true
    current_featured = self.imageable.featured_image
    if current_featured and current_featured != self
      current_featured.write_attribute(:is_featured, false)
    end
  end
  super(is_featured_value)
end

何が機能していないか知っている人はいますか?

ところで、関連付けられたオブジェクトでフィールドを使用するなど、おそらくこれを行うためのより良い方法があることはわかっていますfeatured_image_idが、この時点で、これを機能させる方法を知りたいと思います。

4

1 に答える 1

0

実行していないすべての OTHER レコードを反復処理する必要があります。スーパーへの呼び出しがあなたのためにそれをしているかもしれないと思うと思いますが、そうではありません。

次のようにする必要があります。

def is_featured=(is_featured_value)
  if is_featured_value == true
    ???.each do |i|
       if i.id == self.id
         i.is_featured = true
       else
         i.is_featured = false
       end
    end
  else
    self.is_featured = false
  end
end

それで ???これは、関係をどのように設定したかによって異なります。確実に知るには、十分なコードを示していません。

于 2012-04-25T17:01:54.287 に答える