1

私は何時間も検索してきましたが、役立つものは何も見つかりませんでした。

私がしたいこと:

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"=> <...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]

レールがパラメータをURLに入れないようにして、代わりに隠して渡したいです。

で作成したフォームを送信するとform_for、URLに何もないので、可能だと思います。

その方法を教えてください。


試した手順

  • get、put、post - 違いはありません。の呼び出しcheck_loginは非常に短いですが、url-with-params がコンソールに表示されます
  • インスタンス変数を作成し、それをparamとして渡します(奇妙で、どちらも機能しませんでした)
  • 動作を観察form_forする – 結果がなく、手掛かりがありません


//edith:
これまでご協力いただきありがとうございました。おそらく、問題を十分に詳細に指定していませんでした。text_field短いコマンドを入力する (実験的に) があります。そのフォームは を呼び出しexecuteAppControllerlogin-data の場合は を実行しredirect_to check_loginます。Web ページにアクセスする必要はありません。単にメソッドを実行したいだけです。に入れるというアイデアは気に入りました:flashが、データを非表示にして渡す「より適切な」方法があるかどうか疑問に思っています。

4

4 に答える 4

4

TL; DR バージョン:フォームを使用します。

パラメータを完全に非表示にすることはできません。ツールを使用してリクエストを監視し、投稿データ/パラメータを表示できます。ただし、暗号化されたセッションで難読化できます。また、GET リクエストを介してログイン情報を送信しているように見えますが、これは一般的に悪い習慣です。

それは言った...

あなたにとって間違っているのは、link_to :method => :post で投稿データを生成していないことです。link_to は、指定したパラメーターを使用して URL を生成します。Wheres フォームは、フォームによって生成されたすべてのパラメーターを POST データとして form_for 呼び出しで生成された URL に送信します。

POST リクエストを受け取ると、Rails は URL からルーティング ピックアップが取得したパラメーターを、受け取った投稿データと 1 つの 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 と同じ params ハッシュを生成します。

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

サーバー ログには、2 つの要求の区別はありません。

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

交換

:method => :get)

:method => :post)

:getとはどう違い:postますか?HTML フォームでメソッド GET と POSTを読む- 違いは何ですか?

于 2009-12-18T23:59:57.060 に答える
1

form_forフォームを作成してからPOSTサーバーに送信すると、URL にパラメーターが表示されないのはそのためです。パラメーターは http 要求本文にあります。しかし、ユーザーのブラウザーをコントローラーのあるアクションから別のアクションにリダイレクトすることはできません。可能であればPOST、ユーザーを (たとえば) gmail のメール変更フォームまたは他のフォームにリダイレクトできます。ユーザーを他のサイトにリダイレクトすることしかできず、そのユーザーのブラウザはリダイレクトされますGET

URL にパラメーターを表示したくない場合、および両方のアクションが同じアプリケーション内にある場合は、これらのパラメーターを保存するsessionか、flash保存して、リダイレクト後の次のリクエストで取得できます。

于 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 に答える