我有一个测试,需要设置一些数据库状态:
before do
Site.first.update_attribute(:primary_domain, @params[:order][:primary_domain])
end
但是,由于某种原因,这修改了@params:
before do
@params[:order][:primary_domain].must_equal "example.com"
Site.first.update_attribute(:primary_domain, @params[:order][:primary_domain])
@params[:order][:primary_domain].must_equal "example.com"
end
这失败了,第二个@params[:order][:primary_domain].must_equal "example.com"
失败了,那里更新了一些东西@params[:order][:primary_domain]
。奇怪的是,我本以为update_attribute(name, value)
不会碰value
,但不知何故,它确实如此。
可以用.dup
. 但我对可能导致这种情况的原因很感兴趣。这可能是范围问题吗?可能与我正在使Site.primary_domain
on正常化这一事实有关save
吗?
# Override the primary_domain setter.
# Allows us to normalise the domain
def primary_domain=(primary_domain)
return primary_domain unless primary_domain.is_a?(String)
write_attribute(:primary_domain, Site.parse_uri(primary_domain.dup).host)
end