Ruby on rails - 为什么没有“self”就无法更新 ActiveRecord 模型中的关联属性



我定义了一个模型,它是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(通常避免使用以保持代码尽可能干净)。


来自社区编辑的 ruby 风格指南:

在不需要的地方避免自我。(仅在调用 自写访问器。

# 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

这不仅仅是一个 ActiveRecord 问题。 Ruby 解析器将像 foo = 123 这样的表达式视为局部变量赋值。 为了调用访问器方法,您需要前缀self.以消除歧义并执行赋值方法。

相关内容

  • 没有找到相关文章

最新更新