2012-04-25 2 views
0

내 응용 프로그램에는 다른 클래스에 polimorphically 연관되어있는 Image 클래스가 있습니다. 그래서 각각의 객체는 일련의 이미지를 가지고 있으며, 그 중 하나를 추천 이미지로 설정할 수 있기를 원합니다.관련 객체가있는 라디오 버튼처럼 동작하는 부울 필드를 만들고 싶습니다.

Image 클래스에 is_featured 필드를 추가 했으므로이 필드가 true로 설정된 연결된 객체 당 하나의 이미지 만 있는지 확인하려고했습니다.

그래서이 필드에 대한 setter 메서드를 재정의하려고했습니다. 이것은 내가 지금까지 무엇을 가지고 있지만 (이 falseis_featured 나머지 필드를 설정 나던) 작업을 나던 :

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 

누구나가 작동 밤은 무엇인지?

BTW 관련 객체에서 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 메서드가있는 경우이를 언급하는 것을 잊어 버렸습니다. 그 방법은 매우 간단하고 perfetly 작품, 그래서 난 그게 문제라고 생각하지 않습니다. 나는 그들을 위해 모든 경우에 반복적으로 시도 할 것이다. –

관련 문제