Ruby on rails 使用更新增加模型属性!方法

Ruby on rails 使用更新增加模型属性!方法,ruby-on-rails,ruby,activerecord,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,在我的应用程序中,当用户未通过法律测试时,我应将其状态更改为不活动,将当前日期更改为状态更新,并增加失败的尝试次数。通常情况下,我会使用如下内容: current_user.update!( status: 'inactive', failed_attempts: +1, status_updated_at: Date.current ) 但是有没有一种语法可以使用内置的方法,比如increment成为current\u user.update!(…,增量!

在我的应用程序中,当用户未通过法律测试时,我应将其状态更改为
不活动
,将当前日期更改为
状态更新
,并增加
失败的尝试次数
。通常情况下,我会使用如下内容:

  current_user.update!(
    status: 'inactive',
    failed_attempts: +1,
    status_updated_at: Date.current
    )
但是有没有一种语法可以使用内置的方法,比如
increment
成为
current\u user.update!(…,增量!(:尝试失败)…),


我不知道,但使用
计数器\u缓存
可能是杀伤力过大,因为用户只有2到5次尝试。

我不认为这是一次性的可能性。您可以尝试这样做:

current_user.increment(:failed_attempts)
current_user.update_attributes(status: 'inactive', status_updated_at: Date.current)
current_user.save!
或者这个:

current_user.update!(
  status: 'inactive',
  failed_attempts: (current_user.failed_attempts || 0) + 1,
  status_updated_at: Date.current
)

我不认为这是一次性的可能性。您可以尝试这样做:

current_user.increment(:failed_attempts)
current_user.update_attributes(status: 'inactive', status_updated_at: Date.current)
current_user.save!
或者这个:

current_user.update!(
  status: 'inactive',
  failed_attempts: (current_user.failed_attempts || 0) + 1,
  status_updated_at: Date.current
)

存在竞争条件的可能性(即,与数据库中的值相比,模型实例持有一个过时的值),因此可以与
事务一起使用

transaction do
  current_user.class.update_counters(current_user.id, failed_attempts: 1)
  current_user.update(status: :inactive, status_updated_at: Date.current)
end

存在竞争条件的可能性(即,与数据库中的值相比,模型实例持有一个过时的值),因此可以与
事务一起使用

transaction do
  current_user.class.update_counters(current_user.id, failed_attempts: 1)
  current_user.update(status: :inactive, status_updated_at: Date.current)
end

这两个都很活泼。potashin的回答给出了一个更可靠的方法。这两种方法都很有活力。potashin的回答提供了一个更可靠的方法。
计数器缓存
可能没有做你认为它做的事。
计数器缓存
可能没有做你认为它做的事。