0

我的应用程序有一个 Image 类,多态关联到不同的类。所以这些对象中的每一个都有一组图像,我希望能够将其中一个设置为特色图像。

因此,我is_featured在 Image 类中添加了一个字段,并且我想确保每个关联对象只有一个图像,并将该字段设置为 true。

所以我试图覆盖这个字段的setter方法。这是我到目前为止得到的,但它不起作用(它没有将其余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 记录。我认为您认为对 super 的调用可能会为您执行此操作,但事实并非如此。

你需要它看起来像:

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 回答