我试图将文本框的输入保存到会话(或cookie)而不是数据库,他们没有签署任何东西。
我希望他们能够输入他们的邮政编码,并将其作为变量推送到地图。我不需要通过这一个网页保存该信息。
我试图让form_for保存到会话,但它一直试图将其保存到数据库。
这是我的代码。
<%= simple_form_for @session_location do |f| %>
<%= f.input :location %>
<%= f.button :submit %>
<% end %>
form_for引用模型,是一种帮助方法,旨在简化数据库中的对象创建或更新。这似乎不是你想要的,因此你可能根本不需要使用它。你仍然可以,但没有太多需要它
可能,您想要做的是拦截提交并将请求发送到您通过ajax定义的自定义路由,该路由将设置会话变量。
如果您没有共享任何代码,很难为您提供答案,但它可能看起来像这样:
class MapController < ApplicationController
def index
@session_location = session[:location]
end
def set_location
respond_to do |format|
f.json do
session[:location] = location_params[:location]
redirect_to :index
end
end
end
private
def location_params
params.permit(:location)
end
end
请记住在路由文件中添加#set_location端点。
然后,在您的视图中,为提交按钮分配ID并添加一些javascript。它可能看起来像这样:
$("#yourSubmitButton").click(function(e){
e.preventDefault();
$.ajax({
type: "GET",
dataType: "json",
url: "/locations",
success: function(data){}
});
});
这主要是伪代码,因为我不知道你的代码实际上是什么样的,但这是一种做你想要的方法的一般想法。这可能不是做这种事情最优雅的方式。
您可能需要考虑使用cookie而不是会话变量,有一些Rails宝石可以轻松地使用cookie,例如js_cookie_rails。这样你就可以避免需要ajax和/或重新加载页面。从本质上讲,你仍然可以拦截提交动作但不是使用ajax,而只是Cookie.set[:location]在你的javascript中做一个简单的操作,然后你可以将你的Map javascript用于使用/显示航点。使用这种方法,你不需要任何东西,真的,在你的Rails控制器中,你不需要新的路由,所有你需要做的就是一些JS / CSS。
但是,同样,由于我不知道您使用的是哪种工具用于地图或代码是什么样的,因此这种方法更难以提供示例/解决方案。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。