符合rails最佳實踐設計模式 - 瘦身控制器,胖模型 - 在哪裏以及如何根據控制器操作設置活動記錄模型的默認值。例如,採取以下行動釋放汽車。如果沒有概述,請提出一個更易維護的方法。開發自定義release_car保存方法是否過度了?Rails - 在哪裏以及如何設置Active Record模型的值 - 控制器或模型?
#### OPTION #1 ####
# controller
def release
# scope available is 'car_status_code = 'A'
@car = Car.available.where(id: params.require(:id),
client_id: current_user.client_id).last
@car.car_updated_at_user_id = current_user.id
# are these considered 'business logic' that go into model???
@car.car_release_date = Date.current
@car.car_status_code = 'R'
# car_release_update_params is about 7 strong params
if @car.update_attributes(car_release_update_params)
render json: "Car released", status: :ok
else
render json: @car.errors.full_messages, status: :unprocessable_entity
end
end
#### OPTION #2 ####
# controller
def release
# scope available is 'car_status_code = 'A'
@car = Car.available.where(id: params.require(:id),
client_id: current_user.client_id).last
# car_release_update_params is about 7 param fields
if @car.release_car(car_release_update_params)
render json: "Car released", status: :ok
else
render json: @car.errors.full_messages, status: :unprocessable_entity
end
end
#model
def release_car(params)
if self.car_status_code != 'A'
errors.add(:base, 'Car must be in Available status to be released')
return false
end
self.car_status_code = 'A'
self.car_release_date = Date.current #timezone friendly
#assign values for other fields based on params hash
.....
self.save
end
最佳實踐不是*瘦身控制器,胖模特*,而是*繁忙控制器*,其中的某些邏輯可以移動到助手,*瘦身模型*和*胖庫*。所以,將'#release_car'移到控制器的幫助器,並從那裏使用它。並有一個清理模型。 –