Ruby on rails Rails中关联的write_属性的等价物是什么?
我想重写关联的setter,但write_attribute()不起作用——可能是因为该方法只适用于数据库列 我试过super(),但也不起作用(没想到会……但值得一猜) 如何覆盖setter?以下是我试图做的:Ruby on rails Rails中关联的write_属性的等价物是什么?,ruby-on-rails,ruby,properties,associations,overriding,Ruby On Rails,Ruby,Properties,Associations,Overriding,我想重写关联的setter,但write_attribute()不起作用——可能是因为该方法只适用于数据库列 我试过super(),但也不起作用(没想到会……但值得一猜) 如何覆盖setter?以下是我试图做的: def parent=(value) # this line needs to be changed write_attribute(:parent, value) if value.subject.start_with?('Re:') sel
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
def parent=(值)
#这条线需要换
写入_属性(:父级,值)
if value.subject.以?('Re:'开头)
self.subject=“#{value.subject}”
其他的
self.subject=“Re:#{value.subject}”
结束
self.receivers我找到了一种方法,但我对此感到不安:
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
alias\u方法:old\u parent=,:parent=
def父项=(值)
self.old_parent=值
if value.subject.以?('Re:'开头)
self.subject=“#{value.subject}”
其他的
self.subject=“Re:#{value.subject}”
结束
self.receivers而不是
def parent=(value)
write_attribute(:parent, value)
end
你就不能这样做:
def parent=(parent)
parent_id = parent.id
end
对我起作用的是:
def parent=(new_parent)
# do stuff before setting the new parent...
association(:parent).writer(new_parent)
end
在Rails 4.2.1文档中:
# Association methods are generated in a module that is included into the model class,
# which allows you to easily override with your own methods and call the original
# generated method with +super+. For example:
#
# class Car < ActiveRecord::Base
# belongs_to :owner
# belongs_to :old_owner
# def owner=(new_owner)
# self.old_owner = self.owner
# super
# end
# end
#关联方法在模型类中包含的模块中生成,
#它允许您轻松地用自己的方法重写并调用原始
#使用+super+生成方法。例如:
#
#类Car