Tôi muốn biết trường nào đã được cập nhật sau câu lệnh update_attributes. Tôi đang lọc các thông số có thể cập nhật và xóa các thông số mà tôi không muốn cập nhật từ params[:model]
. Bây giờ, một số thông số cập nhật mới có thể có cùng giá trị với giá trị cũ và tôi muốn biết thông số nào đã được cập nhật và thông số nào bị bỏ qua vì giá trị giống nhau. Dưới đây là một số mã:Tìm trường nào đã được cập nhật sau khi gọi update_attributes?
UPDATABLE_PARAMS = ["param1", "param2", "param3", "param4"]
def update
@dr = DR.find(params[:id])
authorize! :update, @dr #devise stuff
hnew = params[:dr]
hnew.delete_if {|k, v| !UPDATABLE_PARAMS.include?(k.to_s) }
if @dr.update_attributes(hnew)
@dr.update_attribute(:last_updated_by, current_user.email)
@dr.touch
end
render :update_result
end
Dưới đây là phần khó khăn:
Tôi muốn làm cho đối tượng @dr
trong JSON (nhưng điều đó đã được thiết lập) và thêm vào lĩnh vực tiêu chuẩn của nó, tôi d muốn thêm đối tượng lồng nhau có chứa updated_params
. Tôi chỉ có thể gửi hnew
làm @hnew
cho chế độ xem của mình, nhưng nếu tôi làm như vậy, tôi sẽ nhận được tất cả các thông số đã xử lý, không chỉ các thông số khác nhau.
Làm cách nào tôi có thể nhận được các thông số đã thay đổi?
thực hành tốt nhất là xử lý các thông số được phép gán hàng loạt thông qua attr_accessible và sử dụng: như tùy chọn assign_attributes/update_attributes/new. –
cảm ơn viktor. Tôi đang sử dụng attr_accessible nhưng chỉ cho các hồ sơ mới. Bản cập nhật có các attrs truy cập khác nhau phụ thuộc vào các yếu tố khác (như một vài giá trị trường ghi) – Oktav