gpt4 book ai didi

ruby-on-rails - 为什么没有 `self` 就不能更新 ActiveRecord 模型中的关联属性?

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:03 25 4
gpt4 key购买 nike

我定义了一个模型Item,它是ActiveRecord::Base 的子类它有一个名为 buyer 的关联属性,它是一个成员

它有一个购买方法来更新买家属性。

# do buy transaction on that item
def buy(people_who_buy, amount)
buyer = people_who_buy
save
....
end

此代码无法更新买家属性。生成的sql仅对数据库中的成员进行sql选择。

但是在 buyer 之前添加 self. 之后,它工作正常。

# do buy transaction on that item
def buy(people_who_buy, amount)
self.buyer = people_who_buy
save
....
end

看起来很奇怪!

最佳答案

在调用 write_accessor 时需要调用 self.write_accessor,而在 self.read_accessor 中可以省略 self(通常会避免尽可能保持代码干净)。


来自community-edited ruby styleguide :

Avoid self where not required. (It is only required when calling a self write accessor.)

# bad
def ready?
if self.last_reviewed_at > self.last_updated_at
self.worker.update(self.content, self.options)
self.status = :in_progress
end
self.status == :verified
end

# good
def ready?
if last_reviewed_at > last_updated_at
worker.update(content, options)
self.status = :in_progress
end
status == :verified
end

关于ruby-on-rails - 为什么没有 `self` 就不能更新 ActiveRecord 模型中的关联属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14509673/

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