我预订的型号有列:
: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
答案 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