我有一个测试,需要设置一些数据库状态:
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
,但不知何故,它会。{/ p>
可以用.dup
来规避它。但我对可能导致这种情况的原因感兴趣。这可能是范围问题吗?可能与我Site.primary_domain
上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