gpt4 book ai didi

ruby-on-rails - rails 2.3.8 : Validating an object before save shows previous references and not updated ones

转载 作者:行者123 更新时间:2023-12-04 05:43:59 24 4
gpt4 key购买 nike

我的站点上有一个表单允许更新对象(即书籍)。该书包含引用 Author 类的字段 author_id。该表单允许更改作者。

保存书籍时,会运行验证,但是当某个验证调用 self.author 时,它将接收到以前的作者而不是被选择的新作者。为了解决这个问题,我总是必须通过以下方式重新加载新作者来开始验证:

def some_validation
author = Author.find(self.author_id)
...
end

为什么验证看不到新作者,我怎样才能让它看到,无需每次都重新加载新的引用对象?

谢谢!

最佳答案

这是一个您可以在控制台中复制的问题:

b = Book.new
=> #<Book id:nil, etc...>
b.author_id = 1
=> 1
b.author
=> #<Author id:1, etc...>
b.author_id = 2
=> 2
b.author
=> #<Author id:1, etc...>

所以...更改关联 ID(这是表单 update_attributes 所做的)不会更改加载的关联对象。

但是,如果您首先使该对象无效,则关联的对象会重新加载:

b.author = nil
=> nil
b.author_id = 2
=> 2
b.author
=> #<Author id:2, etc...>

所以你可以(注意斜体,因为我不知道什么是最好的解决方案)如果关联id是在参数哈希中,或继续使用您的方法,但添加一个守卫以仅在必要时重新加载

author = Author.find(self.author_id) if self.author_id_changed?

(很抱歉,如果那是很多漫无边际的内容,基本上没有回答您的问题;-)

关于ruby-on-rails - rails 2.3.8 : Validating an object before save shows previous references and not updated ones,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com