Rails 4:根据其他模型条件更新用户状态

时间:2015-06-04 19:27:05

标签: ruby-on-rails ruby-on-rails-4

我预订的型号有列:

:id
:user_id
:status

然后在用户模型中,我有:

:id
:status(default: 0)

所以我们假设预订模型有:

:id(1)
:user_id(1)
:status(0)

所以问题是,如何在用户模型中定义booking.status == 1,那么它会将用户状态属性从0更新为1?

我尝试过这样的事情:

def check_status
  if Booking.where(status: 2, user_id: self.id)
    self.update_attributes(:status => 1)
  end
end

上面代码的问题是它会更新所有用户状态== 1.我想要的只是更新用户状态,如果他们的预订(belongs_to关系)状态== 2

编辑(1):

预订状态说明

0 = Active
1 = Closed
2 = Expired

用户状态说明

0 = Active
1 = Suspend

2 个答案:

答案 0 :(得分:3)

User模型中:

def update_status
  self.update(status: 1) if self.bookings.pluck(:status).include? 2
end

答案 1 :(得分:1)

在预订模式中

after_save :update_user

private
 def update_user
  user.status = 1 if status = 2
end

编辑:根据您的CRON要求:

def check_status
 self.update_attributes({status: 1}) unless bookings.where(status: 2).empty?
end

编辑编辑:使用预订来跟踪用户状态:

after_save :update_status

private
def after_save
 switch(status)
 when 1
  user.update_attributes({status: 0})
 when 2
  user.update_attributes({status: 1})
end