1

I've been searching for hours now and haven't found anything that helps.

What I want to do:

I need to call the check_login-Method (as below), which needs parameters.

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

The point is that these params are sent in the method-call as in the "Redirected to"-line below.

Processing ApplicationController#execute(for 127.0.0.1 at 2009-12-19 00:28:40) [POST]
Parameters: {"command"=>{"line"=>"log dodo wg"}, "authenticity_token"=> <...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]

I want to prevent rails from putting the params into the url and pass them hidden instead.

When I send a form created with form_for, there's nothing in the url, so I assume it must be possible.

Please tell me how to do that.


Steps tried

  • I have tried different "html-verbs": get, put, post - no difference. Though the call of check_login is really short the url-with-params shows up in my Console
  • create an instance variable and pass it as param (strange, didn't work either)
  • watch form_for working – without results, got no clue


//edith:
Thanks for all your help so far. Perhaps I didn't specify my problem in enough detail. I've got a text_field in which I enter short commands (experimentally). Its form calls execute in AppController, which in case of login-data performs redirect_to check_login. I don't need to access a webpage, I simply want to run the method. I liked the idea of putting it into :flash, but I'm wondering if there's a "neater" way to do pass the data hidden.

4

4 回答 4

4

TL; DR 版本:使用表格。

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

那就是说...

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

在收到 POST 请求后,Rails 将从 URL 中获取的参数路由与它接收到的 post 数据合并到一个 params 哈希中。

与 POST 一样

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

http://localhost:3000/benutzer/check_login在接收控制器操作中生成与带有以下数据的 POST 相同的参数哈希:

 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 不会为您填充帖子数据。您必须通过表单或使用 javascript 来完成。link_to 文档包含使用 javascript 执行此操作的示例。查看如何处理 :onclick 的破坏。

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

于 2009-12-19T01:29:16.837 回答
3

Replace

:method => :get)

with

:method => :post)

What's the difference between :get and :post? Read Methods GET and POST in HTML forms - what's the difference?

于 2009-12-18T23:59:57.060 回答
1

随着form_for您创建表单,然后将其POST编辑到服务器,这就是您在 url 中看不到参数的原因 - 它们在 http 请求正文中。但是不可能将用户的浏览器从控制器中的某些操作重定向到另一个操作POST- 如果可能的话,那么我可以将用户重定向到(例如)gmail 或其他形式的电子邮件更改形式。您只能将用户重定向到其他站点,然后是哪个用户的浏览器GET

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

于 2009-12-19T00:24:32.590 回答
0

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

在某些情况下,将:get更改为:post并不好。

例如,在控制器的:index操作的情况下,它不是使用: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'
于 2013-09-16T10:35:59.477 回答