0
我正在处理的一个应用程序试图在不使用多态性的情况下使用多态的概念。自定义belongs_to属性编写器
class User
has_many :notes
end
class Customer
has_many :notes
end
class Note
belongs_to :user
belongs_to :customer
end
固有我们有笔记两列:user_id
和customer_id
,现在这里的坏事是有可能的便条到现在已经有一个customer_id
和user_id
在同一时间,这是我不想要的。
我知道一个简单/更好的方法是使笔记表多态,但有一些限制,阻止我现在这样做。
我想知道是否有一些自定义的方式来覆盖这些关联,以确保分配一个时,另一个未分配。
这里是我试过的:当使用
def user_id=(id)
super
write_attribute('customer_id', nil)
end
def customer_id=(id)
super
write_attribute('user_id', nil)
end
这不起作用:
note.customer=customer or
note.update(customer: customer)
,但工程使用的时候:
note.update(customer_id: 12)
基本上,我需要一个可以适用于这两种情况,而无需编写4种方法:
def user_id=(id)
end
def customer_id=(id)
end
def customer=(id)
end
def user=(id)
end
谢谢。这个问题是,在坚持一条记录之前,我会同时记录两个状态,因此,如果我有一个像'before_save:do_something_to_owner'这样的应用程序,那么该应用程序就会变得混乱,因为这两个状态当前存在并且依赖于顺序回调不好。另一个越野区域将一次更新两个字段,现在总是回退到第一个分支,现在假设我只是将字段更新为零,然后我还需要再次检查参数。虽然似乎是一个很好的解决方案,但我认为它会在以后出现更多的错误。我想我会在这里明确 – oreoluwa