Tôi đang cố gắng sử dụng cached
chức năng để ngăn chặn các truy vấn nhiều db trong widget và xử lý khác nhau:Làm thế nào để sử dụng bộ đệm ẩn cho mỗi yêu cầu?
newtype CachedBobId key
= CachedBobId { unCachedBobId :: key }
deriving Typeable
getBob' :: Handler BobId
getBob' = do
uncle <- runInputGet $ ireq textField "bobsuncle"
(Entity bob _) <- runDB $ getBy404 $ UniqueBob uncle
return bob
getBob :: Handler BobId
getBob = do
a <- getBob'
let b = return $ CachedBobId a
c <- cached b
return $ unCachedBobId c
Và trong một widget ở đâu đó:
renderDerp :: Widget
renderDerp = do
--these are used in the shakespeare files
lolBob <- handlerToWidget $ getBob
nutherBob <- handlerToWidget $ getBob
$(widgetFile "test")
này biên dịch nhưng truy vấn để có được ID vẫn chạy nhiều lần.
Tôi đang làm gì sai? Hoặc là có một cách tốt hơn để chỉ nhận được bob một lần và sử dụng anh ta trong mọi xử lý và phụ tùng?
Không thực sự đọc mã bên trong câu hỏi (vì tôi đã gặp sự cố với 'cache '). Ai đó sẽ nhận được 200 điểm thật sự dễ dàng. – Cthulhu