Fir*_*lem 7 ruby overriding properties ruby-on-rails associations
我想覆盖关联的setter,但write_attribute()不起作用 - 可能是因为该方法仅适用于数据库列.
我已经尝试过super(),但这也不起作用(不认为它会...但值得一猜).
如何覆盖setter?这是我想要做的:
def parent=(value)
# this line needs to be changed
write_attribute(:parent, value)
if value.subject.start_with?('Re:')
self.subject = "#{value.subject}"
else
self.subject = "Re: #{value.subject}"
end
self.receivers << value.sender
end
Run Code Online (Sandbox Code Playgroud)
Lef*_*dis 11
对我有用的是:
def parent=(new_parent)
# do stuff before setting the new parent...
association(:parent).writer(new_parent)
end
Run Code Online (Sandbox Code Playgroud)
我找到了一种方法来做到这一点,但我对此感到不安:
alias_method :old_parent=, :parent=
def parent=(value)
self.old_parent = value
if value.subject.start_with?('Re:')
self.subject = "#{value.subject}"
else
self.subject = "Re: #{value.subject}"
end
self.receivers << value.sender
end
Run Code Online (Sandbox Code Playgroud)
我不一定喜欢 Rails 的一件事是,每当你想做一些有点超出常规的事情时 - 但无论如何也不是不合理 - “如何”与你的直觉会非常不同。
当你知道例外情况时,这不是问题,但当你学习时,这种做事方式的不规则性和不一致会使学习变得更困难,而不是更容易。
Java 最初可能更难学,但它更加一致。一旦您用 Java 进行思考,您的直觉就会带您走得更远。一旦你在 Rails 中思考,情况就不是这样了。Rails 是关于记忆调用方法和记忆如何做事的。在java中,你可以推理出更多的东西......而智能感知会填补剩下的部分。
我只是很失望。这对我来说是一个反复出现的模式 - 我想做一些比框架示例“稍微复杂一点”的事情......并且“如何”不一致,需要 30 分钟甚至可能几个小时才能找到并找到答案它。
| 归档时间: |
|
| 查看次数: |
1604 次 |
| 最近记录: |