gpt4 book ai didi

ruby-on-rails - 为搜索选项制作 cookie?

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:28 27 4
gpt4 key购买 nike

我需要帮助来为我的搜索选项创建这些 cookie。我读过 Rails GuideAPI但仍然不明白如何正确制作 cookies 。我有两个用于过滤搜索结果的复选框。他们开始时已经检查过,但我需要它做的是将设置保存在 cookie 中,如果其中一个在下一次搜索中未被选中。为了更好地理解,这是一张图片:

How it looks


答案:

class SearchController < ApplicationController
def index
@title = "Search"
@page_title = "Search"
# Checkboxes are already checked.
params[:online_search_checked] = true
params[:offline_search_checked] = true
restore_cookie # if user enters this page in the future we restore checkboxes state from the cookies. For the first visit checkbox value will be true.
end

def results
update_cookie # each time user submits search we need to update cookies.
restore_cookie # each time user submits search we need to show search page with correctly checked check boxes.
@title = "Search"
@page_title = "Search"
@search = Product.search do |q|
q.fulltext params[:search]
q.with(:coordinates, params[:coordinates]).near(latitude, longitude, :precision => 3) if params[:coordinates].present?
q.with(:online_search, false) if params[:online_search].nil? # search user prices that are online automatically if checkbox is checked.
q.with(:offline_search, true) if params[:offline_search].nil? # search user prices that are offline automatically if checkbox is checked.
q.paginate(:per_page => 20, :page => params[:page])
q.order_by(:purchase_date, :desc)
q.order_by(:price,:asc)
end
@products = @search.results
end

def update_cookie
update_cookie_with_param(:online_search, :online_search_checked)
update_cookie_with_param(:offline_search, :offline_search_checked)
end

def restore_cookie
restore_param_from_cookie(:online_search_checked)
restore_param_from_cookie(:offline_search_checked)
end

def update_cookie_with_param(value_param_name, checked_param_name)
checked = params[value_param_name].nil? ? "false" : "true"
cookies[checked_param_name] = { :value => checked, :expires => 2.weeks.from_now }
end

def restore_param_from_cookie(checked_param_name)
if cookies[checked_param_name]
params[checked_param_name] = (cookies[checked_param_name] == "true")
end
end
end

# On index and result page in partial
<%= form_tag results_search_index_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<%= label_tag :online_search, 'Online' %>
<%= check_box_tag :online_search, 'online_search_value', params[:online_search_checked] %>
<%= label_tag :offline_search, 'Offline' %>
<%= check_box_tag :offline_search, 'offline_search_value', params[:offline_search_checked] %>
<% end %>

最佳答案

Cookie is a message given to a Web browser by a Web server. The browser stores the message in a text file. The message is then sent back to the server each time the browser requests a page from the server.

在rails中可以使用cookies、cookies.permanent和cookies.signed来写cookies:

  • cookies - 简单 session cookies
  • cookies.permanent - 创建 cookie future 20 年到期
  • cookies.signed - 生成cookie 的签名表示以防止篡改其值最终用户。

为了解释 cookie 的使用,我为您的应用程序创建了两个 session cookie:“online_search_checked”和“offline_search_checked”。它们包含“真”或“假”值,并表示是否选中了适当的复选框。

check_box_tag 具有以下参数:checkbox_name、checkbox_value、is_checked。我们需要根据从 cookie 接收到的值修改第三个参数。第二个值可以是常数。如果选中复选框,则 params[:checkbox_name] == checkbox_value。如果未选中复选框,则 params[:checkbox_name] == nil。

算法如下:

  • 当用户第一次点击“搜索/索引”时,他没有'online_search_checked' 和 'offline_search_checked' cookie 设置。然后,您想向他显示默认选中的两个复选框。
  • 如果这不是第一次,则用户已经设置了 cookie,并且我们需要从这些 cookie 中恢复复选框的状态。
  • 当用户点击“搜索/结果”时,我们会使用复选框的当前状态更新 cookie并从这些 cookie 中恢复复选框的状态。

这是带有我的评论的代码:

class SearchController < ApplicationController
def index
params[:online_search_checked] = true
params[:offline_search_checked] = true
restore_cookie # if user enters this page in the future we restore checkboxes state from the cookies. For the first visit checkbox value will be true.
end

def results
update_cookie # each time user submits search we need to update cookies
restore_cookie # each time user submits search we need to show search page with correctly checked check boxes

# Using Sunspot here.
@search = Product.search do |q|
q.fulltext params[:search]
q.with(:online_search, params[:online_search] == 1) if params[:online_search].nil?
q.with(:offline_search, params[:offline_search] == 0) if params[:offline_search].nil?
end

@products = @search.results # Sunspot rendering results.
end

def update_cookie
update_cookie_with_param(:online_search, :online_search_checked)
update_cookie_with_param(:offline_search, :offline_search_checked)
end

def restore_cookie
restore_param_from_cookie(:online_search_checked)
restore_param_from_cookie(:offline_search_checked)
end

def update_cookie_with_param(value_param_name, checked_param_name)
checked = params[value_param_name].nil? ? "false" : "true"
cookies[checked_param_name] = { :value => checked, :expires => 2.weeks.from_now }
end

def restore_param_from_cookie(checked_param_name)
if cookies[checked_param_name]
params[checked_param_name] = (cookies[checked_param_name] == "true")
end
end
end

# On index and result page in partial
<%= form_tag 'results', :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<%= check_box_tag :online_search, 'online_search_value', params[:online_search_checked] %>
<%= check_box_tag :offline_search, 'offline_search_value', params[:offline_search_checked] %>
<% end %>

希望这对您有所帮助!


更新

我不太明白你想在这里做什么:

q.with(:online_search, params[:online_search] == 1) if params[:online_search].nil?
q.with(:offline_search, params[:offline_search] == 0) if params[:offline_search].nil?

在您的代码中,params[:online_search] == 1params[:offline_search] == 0 表达式将始终为 false 因为根据 if 条件,params[:online_search]params[:offline_search]nil

关于ruby-on-rails - 为搜索选项制作 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409235/

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