Html 是否可以使用Rails中的表单更新会话变量?
我正在开发一个表单,它应该允许用户更新一个名为Html 是否可以使用Rails中的表单更新会话变量?,html,ruby-on-rails,Html,Ruby On Rails,我正在开发一个表单,它应该允许用户更新一个名为session[:city]的会话变量,该变量跟踪他们的位置。该变量不需要保存在数据库中,因为它是一种一次性的;它只需要在用户在站点上时存在 session[:city]在整个站点的多个地方都使用,因此我在应用程序控制器中放置了以下方法: class ApplicationController < ActionController::Base before_filter :set_city def set_city unles
session[:city]
的会话变量,该变量跟踪他们的位置。该变量不需要保存在数据库中,因为它是一种一次性的;它只需要在用户在站点上时存在
session[:city]
在整个站点的多个地方都使用,因此我在应用程序控制器中放置了以下方法:
class ApplicationController < ActionController::Base
before_filter :set_city
def set_city
unless session[:city].present?
session[:city] = request.location.city
end
if params[:city].present?
session[:city] = params[:city]
end
end
end
class ApplicationController
这部分工作正常,我能够在整个站点调用该变量
我遇到的问题是通过表单更新变量。我需要它做的唯一操作是更新变量,但它没有响应。我知道我在这里遗漏了一些东西,但在尝试了很多东西之后,我有点不知所措。这是我目前的基本表格:
<%= form_tag do %>
<%= text_field_tag :city, params[:city] %>
<%= submit_tag %>
<% end %>
编辑为工作代码这在类似生产的环境中不起作用,在这种环境中,您有多个工作进程来处理请求(unicorn或passenger)。每个进程都有自己的内存。如果在一个工作进程处理请求期间更改了该值,则其他进程将不会具有更新的值
您应该使用会话来存储此信息。这在类似生产的环境中不起作用,在这种环境中,您有多个工作进程来处理请求(unicorn或passenger)。每个进程都有自己的内存。如果在一个工作进程处理请求期间更改了该值,则其他进程将不会具有更新的值
您应该使用会话来存储此信息。您可以尝试以下方法:-
<%= form_tag do %>
<%= text_field_tag :person, :city, :name => "city" %>
<%= submit_tag %>
<% end %>
class ApplicationController < ActionController::Base
before_filter :set_city
def set_city
unless session[:city].present?
session[:city] = params[:city] || request.location.city
end
end
end
“城市”%>
类ApplicationController
您可以尝试以下方法:-
<%= form_tag do %>
<%= text_field_tag :person, :city, :name => "city" %>
<%= submit_tag %>
<% end %>
class ApplicationController < ActionController::Base
before_filter :set_city
def set_city
unless session[:city].present?
session[:city] = params[:city] || request.location.city
end
end
end
“城市”%>
类ApplicationController
需要将条件拆分为两条语句:一条除非用于设置会话[:city],一条如果用于检查是否传递了任何参数
class ApplicationController < ActionController::Base
before_filter :set_city
def set_city
unless session[:city].present?
session[:city] = request.location.city
end
if params[:city].present?
session[:city] = params[:city]
end
end
end
class ApplicationController
以及工作形式:
<%= form_tag root_path do %>
<%= text_field_tag :city, params[:city], :placeholder => "#{session[:city]}: Change City" %>
<% end %>
“#{会话[:城市]}:更改城市”%>
需要将条件拆分为两条语句:一条除非用于设置会话[:city],一条如果用于检查是否传递了任何参数
class ApplicationController < ActionController::Base
before_filter :set_city
def set_city
unless session[:city].present?
session[:city] = request.location.city
end
if params[:city].present?
session[:city] = params[:city]
end
end
end
class ApplicationController
以及工作形式:
<%= form_tag root_path do %>
<%= text_field_tag :city, params[:city], :placeholder => "#{session[:city]}: Change City" %>
<% end %>
“#{会话[:城市]}:更改城市”%>
如果我将所有@city
实例替换为会话[:city]
在生产环境中是否可行?我是否能够通过用户提交的表单更新会话变量?否。将其作为参数传递给控制器,并在控制器中设置会话,使我的表单在单个页面上工作,但一旦我离开,它就会丢失值。会话变量是否有我遗漏的东西,因此它会在整个站点上运行?当您在会话中输入一些值时,它将一直可用,直到会话结束。因此,您将能够访问所有页面中的变量。您可以将其作为会话[:city]阅读。当您要更改值时,请在控制器中更改它。如果我将所有@city
实例替换为会话[:city]
在生产环境中有效吗?我是否能够通过用户提交的表单更新会话变量?否。将其作为参数传递给控制器,并在控制器中设置会话,使我的表单在单个页面上工作,但一旦我离开,它就会丢失值。会话变量是否有我遗漏的东西,因此它会在整个站点上运行?当您在会话中输入一些值时,它将一直可用,直到会话结束。因此,您将能够访问所有页面中的变量。您可以将其作为会话[:city]阅读。如果要更改值,请在controller.Hmm中更改它。当我删除除非语句时,set_city
方法使用您的代码工作,因此逻辑将是session[:city]等于用户的参数或请求的位置。问题是,当传入参数时,我仍然需要表单来更新会话[:city]。它似乎没有为多个页面存储更新。我很困惑您是如何获得request.location.city的。可能当您不提交表单时,request.location.cityAh会将其设置为nil。if/else/除非语句正在重新分配变量。因此,我需要编写一些东西来获取默认的请求.location
,并覆盖会话[:city]
ifparams[:city]
已输入。request.location.city是RubyGeocoder提供的一种方法,通过IP地址获取位置。需要将条件拆分为两条语句:一条除非设置会话[:city],一条如果检查是否传递了任何参数。谢谢你的帮助!嗯。当我删除了unlike statem时,我用你的代码使用了set\u city
方法