gpt4 book ai didi

javascript - Rails 缓存或本地存储查询参数?

转载 作者:行者123 更新时间:2023-12-03 05:05:18 24 4
gpt4 key购买 nike

我尝试存储 API 调用的查询字符串,以便我可以在接下来的 30 或 60 或更多结果中再次使用它。当我在 Rails 中使用缓存时,查询会在互联网上的不同计算机之间传递。那不是我想做的。它应该只适用于一个用户,然后这个未登录的用户或其他人可以通过点击链接获得下一个结果。

所以我尝试使用 javascript 来代替从文本字段中获取输入,然后将其存储在 sessionStorage 中。它工作一次,然后我不知道如何再次更改该 sessionStorage。

代码如下。有什么想法如何在 Rails 中正确存储查询字符串以供下一次 api 调用吗?

模型1

def self.search_results(search_term_web, params_web)


Rails.cache.write 'searchterm', search_term_web

results = good.search(search_term_web)

end

模型2

def self.search_results_again(params_web)


results = good.search(Rails.cache.write 'searchterm')

end

Controller

def search


if params[:q]


@params_web = {:count =>30, :offset => 0}
params[:bing] = @params_web


@q = User.search_results(params[:q], params[:good])


if @q

# render json: @q

render partial: "cognitives/q"

else

render status: :not_found, nothing: true

end

end

end


def search30

if Rails.cache.read 'searchterm'

@params_web = {:count =>30, :offset => 30}
params[:bing] = @params_web


@q = User.search_results_again(params[:good])


if @q

# render json: @q

render partial: "cognitives/q"

else

render status: :not_found, nothing: true

end
end

end

另一种使用 Javascript 的方法

var addsearchterm = function (){

localStorage.begriff = document.getElementById('web- text').value;
document.getElementById('begriff').innerHTML = localStorage.begriff;
};

addsearchterm();

最佳答案

如果您想要每个用户缓存,您可以使用 session ID 作为缓存键的一部分:

cache_key = session.id + search_term_web.to_query
Rails.cache.write({ id: session.id }, search_term_web)

您还可以使用用户 ID 或任何其他唯一标识符。您不限于使用字符串作为缓存键 - 您也可以使用数组或哈希。

您还可以将内容存储在 session 存储中 - 但是 the default store (CookieStore)浏览器对 cookie 施加的大小非常有限。如果您打算存储类似 API 调用的响应之类的内容,您应该使用其他存储机制,例如 Redis 或 Memcached。

但是, session 在模型中不可用 - 您需要将 session 传递到模型中或在 Controller 中处理缓存。

关于javascript - Rails 缓存或本地存储查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42028274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com