如何隐藏我传输给方法的params(比如form_for似乎这样做)?

我一直在寻找几个小时,但没有发现任何有用的东西。

我想做的事:

我需要调用check_login -Method(如下所示),它需要参数。

 redirect_to check_login_users_url( :user => {:name => input[1], :password => input [2] }, :stylesheet => 'scaffold', :method => :get) 

关键是这些参数在方法调用中发送,如下面的“重定向到” – 线。

 Processing ApplicationController#execute(for 127.0.0.1 at 2009-12-19 00:28:40) [POST] Parameters: {"command"=>{"line"=>"log dodo wg"}, "authenticity_token"=> } Redirected to http://localhost:3000/benutzer/check_login?method=get&stylesheet=scaffold&user%5Bname%5D=dodo&user%5Bpassword%5D=wg Completed in 9ms (DB: 0) | 302 Found [http://localhost/execute] 

我想阻止rails将params放入url并将其隐藏。

当我发送一个用form_for创建的表单时,url中没有任何内容,所以我认为它必须是可能的。

请告诉我该怎么做。


试过的步骤

  • 我尝试过不同的“html-verbs”:get,put,post – 没有区别。 虽然check_login的调用非常短,但我的控制台中会显示url-with-params
  • 创建一个实例变量并将其作为参数传递(奇怪,也不起作用)
  • 看着form_for工作 – 没有结果,没有任何线索


//伊迪丝:
到目前为止,感谢您的帮助。 也许我没有详细说明我的问题。 我有一个text_field ,我在其中输入短命令(通过实验)。 它的表单调用在AppController execute ,在登录数据的情况下执行redirect_to check_login 。 我不需要访问网页,我只是想运行该方法。 我喜欢把它放入的想法:flash ,但我想知道是否有一种“整洁”的方式来传递隐藏的数据。

TL; DR版本:使用表单。

您永远无法完全隐藏参数,工具可用于监控请求和查看发布数据/参数。 但是,您可以使用加密会话对其进行模糊处理。 此外,您似乎通过GET请求发送登录信息,这通常是一种不好的做法。

那说……

您遇到的问题是您没有使用link_to:method =>:post生成任何post数据。 link_to将使用你给它的parmas来生成url。 Wheres表单会将表单生成的所有参数作为POST数据发送到form_for调用中生成的url。

在收到POST请求后,Rails会将URL中的参数路由选择与其接收的post数据合并为一个参数哈希。

在POST中

 http://localhost:3000/benutzer/check_login?stylesheet=scaffold&user%5Bname%5D=dodo&user%5Bpassword%5D=wg 

在接收控制器操作中生成相同的params散列作为POST到http://localhost:3000/benutzer/check_login并带有以下数据:

  stylesheet=scaffold&user[name]=dodo&user[pasword]=wg 

两个请求之间的服务器日志没有区别。

如果你看一下form_for正在做什么,它会将从表单输入构建的POST数据提交给参数生成的url。

 form_for @user, create_user_url(:stylesheet => "scaffold") do |f| f.text_field :name f.password_field, :password end 

此表单将表单数据提交到从选项生成的URL。 在此示例中,url为: http://localhost:3000/users/create?stylesheet=scaffold ,表单数据为:

 user[name]=name_field_value_at_submit&user[password]=password_field_value_at_submit 

link_to不会为您填充post数据。 您必须通过表单或使用javascript来完成。 link_to文档包含使用javascript执行此操作的示例。 寻找如何处理使用:onclick的破坏。

如果您真的不喜欢按钮,可以使用link_to_function提交表单。

更换

 :method => :get) 

 :method => :post) 

有什么区别:get:post ? 阅读方法在HTML表单中获取GET和POST – 有什么区别?

使用form_for创建表单然后POST到服务器,这就是为什么你没有在url中看到参数 – 它们在http请求体中。 但是不可能将用户的浏览器从控制器中的某个操作重定向到另一个POST – 如果可能的话,那么我可以将用户重定向到(例如)电子邮件更改forms的gmail或其他表单。 您只能将用户重定向到其他站点,然后用户的浏览器才能获得GET

如果您确实不想在url中显示参数,并且两个操作都在同一个应用程序中,那么您可以将这些参数存储在sessionflash存储中,并在重定向后在下一个请求中检索。

您可以使用Ajax请求将表单数据发送到操作

在某些情况下,改变不好进入:发布

例如,在Controller的情况下:索引操作不是很好的使用方法:post

因此,使用ajax调用提交表单并仅更新页面的动态内容。

在js.coffe脚本文件中

 $ -> $("#button-id").on "click", (ev) -> $.ajax type: "GET" dataType: "html" url: "/horoscope_dailies" data: date: date success: (data) -> $("#index_content").html data error: (object, error) -> console.log error 

在你的控制器动作中

 render partial: 'partial_name' if request.xhr? 

在您的视图文件中:

 %div{:id => 'partial_content'} = render 'partial_name' 
Interesting Posts