在Rails中更新属性后需要重新加载变量

3
每当我在RSpec或Cucumber中进行测试时,每次更新属性时,我都需要再次“重新加载”变量:
  @answer.update_attributes(notified: false)
  @answer = Answer.find(@answer)

否则 @answer 不会更新。这似乎效率不高。我是错了还是这就是它应该工作的方式?
编辑:完整规范
describe "notify method" do

  before (:each) do
    @user = FactoryGirl.create(:user)
    friend = generate_friend_for_user(@user)
    @answer = FactoryGirl.create(:answer, user: friend, contact: @user.service)
    @answer.update_attributes(notified: false)
    @answer = Answer.find(@answer)
  end

it "should send an email and update last_email field" do
  @user.update_attributes(last_email: 25.hours.ago)
  @answer.notify.should == true
  @user = User.find(@user)
  @user.last_email.should > 1.minute.ago
end

1
你能发一下你的规格说明吗?这不是预期的行为。对于这段小代码,你可以这样做:'@answer.notified = false' 或 '@answer.assign_attributes(notified: false, key: value, key: value, etc...)',但 '@answer.update_attributes' 应该也能正常工作... 另外,你有一个 @answer.reload 方法(但在那里你不应该需要它)。 - arieljuod
1个回答

0

我已经尝试复制该问题,并且我可以看到使用ActiveRecord#update会重新加载内存中的记录,而ActiveRecord#update_attributes则不会。您使用ActiveRecord#update_attributes的特定原因是什么?该方法在Rails 6中也已被弃用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接