12

現在、View で link_to ヘルパーを使用して、 title 、 author 、image_url 、 isbn などのパラメーターをコントローラーに戻しています。

<%= link_to 'Sell this item',new_item_path(:title => title, :author => authors, :image_url=>image, :image_url_s=>image_s, :isbn=>isbn, :isbn13=>isbn13 ) %>

コントローラーは、後で View のフォームで使用されるオブジェクトにパラメーターを割り当てます (new.html.erb 内)。

def new
      @item = Item.new

      @item.title = params[:title]
      @item.author = params[:author]
      @item.image_url = params[:image_url]
      @item.image_url_s = params[:image_url_s]
      @item.isbn = params[:isbn]
      @item.isbn13 = params[:isbn13]

      respond_to do |format|
        format.html # new.html.erb
        format.xml  { render :xml => @item }
      end
end

次に new.html.erb が呼び出されます。これはすべて正常に機能していますが、URL にはすべてのパラメーターが表示されます

http://localhost:3000/items/new?author=Michael+Harvey&image_url=http://ecx.images-amazon.com/images/I/51vt1uVjvLL._SL160_.jpg&image_url_s=http://ecx.images-amazon.com/images/I/51vt1uVjvLL._SL75_.jpg&isbn13=9780307272508&isbn=0307272508&title=The+Third+Rail

パラメータが URL に表示されないようにする方法はありますか?

4

4 に答える 4

7

パラメータをエンコードし、コントローラーでデコードして、URL を変更したいユーザーを抑止できますか? やり過ぎかもしれませんが…

>> author=ActiveSupport::Base64.encode64("author=jim")
=> "YXV0aG9yPWppbQ==\n"
>> ActiveSupport::Base64.decode64(author)
=> "author=jim"
于 2010-12-13T14:53:45.313 に答える
4

POST を使用してパラメーターを URL からリクエストに移動できますが、これは「正しい」またはベスト プラクティスではありません。HTTP 標準では、非 GET 要求は、サーバー上の状態を変更する要求に対してのみ使用されることを意図しています。POST に応答して生成されたページを更新すると、警告が表示されるのはこのためです。

URL にパラメーターが含まれていても問題はありません。? の後にあるものは言うまでもなく、URL バーに表示されるものにはあまり注意を払うべきではありません。ただし、それらを削除する必要がある場合 (つまり、クライアントの要求) には、いくつかのオプションがあり、そのうちの 2 つが John によって言及されています。

サーバー上の状態を変更するために送信する必要があるフォームを生成しているという点で、「新しい」アクションは REST スタイルであると想定しています。したがって、オプションは次のとおりです。

  1. 標準に準拠していませんが、POST を使用してください。推奨されません。
  2. AJAX GET を使用します。これには JavaScript が必要であり、ajax の処理には、JS フレームワークの使用やテストなどの要件が追加されます。
  3. GET (または POST) を使用しますが、パラメーターを取得して保存すると、保存された値を表示する別のクリーンな URL にユーザーがリダイレクトされます。それらをセッションハッシュに保存するか、それらのデータベースレコードを作成できます. 実際には、これらのパラメーターを保存することでサーバーの状態を効果的に変更しているため、この場合は本当に POST を使用する必要があります。この場合、ユーザーがリダイレクト先のページを更新すると、それらのパラメーターは保持されます。これにより、更新時のブラウザの警告が効果的に削除されます。これは確かにありがたいことです。
于 2010-09-07T17:45:10.683 に答える
2

私が見ることができる 2 つのオプションがあり、どちらも JavaScript に関係しています。

  • パラメーターの非表示のフォーム フィールドにリンクを設定し、HTTP POST 要求を使用してフォームを送信します。
  • リンクから AJAX リクエストをコントローラー アクションに送信します (リンクをクリックしてサーバー側の状態が変化しない限り、HTTP GET を使用します。この場合は POST を使用する必要があります)。

私は2番目のアプローチを取ると思います。

于 2010-09-07T15:57:19.437 に答える