【发布时间】:2011-07-27 10:00:36
【问题描述】:
我有一个非常痛苦的问题,如果有人可以帮忙?
我有一个带有属性的类任务,我想做一个 bang 方法(因为我正在更改接收器)但我无法正确更改对象属性:
def reject!
return nil if self.previous_owner.nil?
self.delegate = false
# Before, owner equal a User object
self.owner = self.previous_owner # previous_owner is also a User object, but different
self.previous_owner = nil
return self if self.save
raise "Can't save object"
end
这行不通,因为 self.owner 将为零... 我知道这是因为告诉 Ruby self.owner = self.previous_owner 然后将 self.previous_owner 更改为 nil。
那么我怎样才能避免这种情况呢?我尝试了 clone 和 dup 方法,但我不确定是否要复制一个新的 User 对象...
如果我在 Rails 控制台中尝试这个,也很奇怪:
a = 'Foo'
b = a
a = 'New value'
puts a # "New value"
puts b # "Foo"
所以我觉得我错过了什么......
【问题讨论】:
-
所有者的访问器方法是什么样的 - 那里发生了什么非标准的事情?还是用户对象中的
@=方法?试试@owner而不是self.owner?试试self.owner, self.previous_owner = self.previous_owner, nil?
标签: ruby-on-rails ruby ruby-on-rails-3