2012-04-25 11 views
0

私のアプリケーションには、異なるクラスにポリモーフィカルに関連付けられたImageクラスがあります。したがって、これらのオブジェクトにはそれぞれ一連のイメージがあり、そのうちの1つを機能イメージとして設定できるようにしたいと考えています。関連付けられたオブジェクトでラジオボタンのように動作するブール値フィールドを作成したい

Imageクラスにis_featuredフィールドを追加しました。このフィールドをtrueに設定して、関連付けられたオブジェクトごとに1つのイメージしか存在しないようにしたいと考えました。

私が試していたのは、このフィールドのセッターメソッドをオーバーライドすることでした。

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 

誰もが作業イマイチ知っている:これは私がこれまでに得たが、それは仕事をdoesnt何(それはfalseからis_featured残りのフィールドを設定しdoesntの)?

私はおそらく、これを行うためのより良い方法があることを知っています。関連するオブジェクトにfeatured_image_idフィールドを使用していますが、この時点で私はこの作業を行う方法を知りたいと思います。

答えて

0

あなたはやっていない他のすべてのレコードを繰り返し処理する必要があります。私はスーパーへの呼び出しがあなたのためにそれをしているかもしれないと思いますが、そうではありません。

あなたのような何か見て、それを必要とするだろう。今、何

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 

を???あなたの関係をどのように設定しているかによって異なりますが、あなたは確かに知るために十分なコードを見せていません。

+0

申し訳ありませんが、「イメージング可能な」オブジェクトには、is_featuredフィールドがtrueに設定されているイメージを返す、featured_imageメソッドがあります。その方法は非常に簡単で、完璧に機能するので、私はそれが問題だとは思わない。私はそれらのすべてを繰り返し処理しようとします。 –