Ruby on rails Rails中关联的write_属性的等价物是什么?

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

我想重写关联的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
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