我有以下关系:
reservation.rb
has_many :room_requests, dependent: :destroy, inverse_of: :reservation
accepts_nested_attributes_for :room_requests, allow_destroy: true
has_many :rooms, through: :room_requests
room_request.rb
belongs_to :reservation
belongs_to :room
room.rb
has_many :room_requests
has_many :reservations, through: :room_requests
我正在尝试从属于某些预订的房间更新属性'status'。类似的东西:
Reservation.joins(:rooms).update_all('rooms.status': 'to_clean')
但显然它不会像这样工作。我想在一个查询中完成它但我无法理解它。我错过了什么?
答案 0 :(得分:1)
您应该通过has_many,通过:room_requests ..
将您的预订模型与客房相关联完成后,您可以轻松使用:
Reservations.rooms.status.update_all('rooms.status': 'to_clean')
但是,请确保您的room_requests可用,并通过room_requests将预订分配给房间。
干杯, Ť
答案 1 :(得分:1)
最后我无法以这种方式进行查询,因为我需要更新的是Room模型,而查询是在Reservation模型中完成的。我需要扭转局面,然后想出来:
Room.where(id: RoomRequest.where(reservation: Reservation.checked_in).select(:room_id)).update_all(status: Room.statuses[:to_clean])