2012-06-18 23 views
9

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?

+0

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. –

+0

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

Trả lời

36

Bản đồ thuộc tính đã được thay đổi khi mô hình được lưu.

@dr.previous_changes() 
+0

Điều này thật đáng buồn. Tôi biết phải có một đường ray cho việc này. Cảm ơn. – Oktav

+0

chính xác và tốt để biết. Tôi khiêm tốn xóa câu trả lời của tôi ... –

Các vấn đề liên quan