gpt4 book ai didi

ruby-on-rails - Rails : set a model attribute as read-only, 但允许通过方法更新

转载 作者:数据小太阳 更新时间:2023-10-29 09:00:30 26 4
gpt4 key购买 nike

我有一个账户模型,我希望其中的balance 是只读的,但它可以通过私有(private)方法更新。

目前

class Account < ActiveRecord::Base
def deposit(amount)
# do some stuff and then
update_balance(amount)
end

private

def update_balance(amount)
self.balance += amount
end

end

但是,这仍然是可能的:

account = Account.first
account.balance += 5
account.save

我希望上面给出一个错误,但仍然能够做到:

account.balance #=> 0
account.deposit(5)
account.balance #=> 5

最佳答案

您可以为属性定义一个私有(private) setter :

class Account < ActiveRecord::Base

private

def balance=(the_balance)
write_attribute(:balance, the_balance)
end
end

然后,你不能在你的 Account 类之外调用它:

Account.new(balance: 1234)
# => ActiveRecord::UnknownAttributeError: unknown attribute 'balance' for 'Account'

Account.new.balance = 1234
# => NoMethodError: private method `balance=' called for <Account ...>

关于ruby-on-rails - Rails : set a model attribute as read-only, 但允许通过方法更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36871348/

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