开发者社区> 问答> 正文

将数据保存到会话

我试图将文本框的输入保存到会话(或cookie)而不是数据库,他们没有签署任何东西。

我希望他们能够输入他们的邮政编码,并将其作为变量推送到地图。我不需要通过这一个网页保存该信息。

我试图让form_for保存到会话,但它一直试图将其保存到数据库。

这是我的代码。

<%= simple_form_for @session_location do |f| %>
<%= f.input :location %>
<%= f.button :submit %>
<% end %>

展开
收起
小六码奴 2019-04-09 17:29:41 1726 0
1 条回答
写回答
取消 提交回答
  • 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。

    但是,同样,由于我不知道您使用的是哪种工具用于地图或代码是什么样的,因此这种方法更难以提供示例/解决方案。

    2019-07-17 23:33:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载