TLDR:そのまま残してください。
HTMLフォームは簡単な方法でシリアル化されます。パラメータにはHTML要素の名前が付けられます。ここでの実際の問題は、フォーム要素の名前付け方法です。彼らはfilter[ShoeBottomType][]
のような名前を持っているようです。あなたのHTMLを見て、name
の属性を見てください。あなたがRailsに入っているので、Railsコントローラメソッドに渡されたフィルタハッシュを1つの引数として渡し、Railsはハッシュが特定のURLを使用することを期待しているので、ハッシュと配列に対してformat(デシリアライズリクエストから)、フォームヘルパーはそのようにフォームを書き込みます。ハッシュ値は配列なので、あなたのものは特に複雑です。したがって、余分な括弧のセットです。その後、URLエンコードされ、あなたは醜い混乱に終わります。
大きなハッシュではなく入力を個別にコントローラに戻すことで、この問題の一部を回避できます。次のようなものがあります:
def index
shoe_bottom_types = params[:bottom_types]
shoe_classifications = params[:classifications]
shoe_elations = params[:elations]
...
/shoes?bottomTypes[]=1&bottomTypes[]=2...
それははるかに良いとは思われません、そして今あなたのコントローラはすべて総体です。同じフィルターを複数用意したい場合、どのようにブラケットを完全に取り除くのか分かりません。 shoeBottomTypes=1|2
を壊すような、あなたのコントローラであなた自身の構文解析を行うことはできますが、あなた自身のフォームのシリアル化も行う必要があります。再び、それだけの価値はない。
秒間バックアップすると、SEOのことはあまり意味がありません。検索エンジンはあなたのフォームに記入しません。彼らは単にリンクをたどります。あなたがGETを使うべき本当の理由は、あなたのフォームを提出することは単なる検索であるので、副作用がないということです(おそらく)。 hereを参照してください。適切なHTTPメソッドを使用することが重要です。 POSTを使用すると、リロード時に奇妙な警告が表示され、検索をブックマークできなくなります。
さらにバックアップすると、なぜSEOが外れているのですか?ただ、迅速なデモとして、私は言葉「もの」のためのGoogle検索を行なったし、これはURLでした:
https://www.google.com/#hl=en&output=search&sclient=psy-ab&q=thing&pbx=1&oq=thing&aq=f&aqi=g2g-s1g1&aql=1&gs_sm=3&gs_upl=764l1877l0l1980l6l6l0l0l0l0l89l432l5l5l0&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.,cf.osb&fp=220ef4545fdef788&biw=1920&bih=1086
だから、フォームの提出のためのURLが長くなることがあります。ユーザーはそれを見ることさえしません。
ここであなたのURLの長さ/醜さを気にする理由は、フォームとは別に特定の検索へのリンクを作成することだけです。それを処理するにはいくつかの方法がありますが、それがあなたに関連するかどうかわからないので、私はそれをフォローアップにします。
だから私は期待しているように見えますが、それを修正しようとすると醜いと無意味な音。
たとえば、訪問者がサイトにアクセスし、いくつかのフィルタを選択し、結果を見てから、彼/彼女/彼女の友人と共有する(リンクを取得したい)。 looooongリンクの私の亜種では、友人がこのリンクを開くと、同じ結果が表示されます。 POSTを介して動作する場合、リンクはhttp:// localhost:3001/shoesのようになり、友人はフィルタリングなしですべての結果を表示します。私は明確に説明してくれることを願っています –
URLにフィルタを入れる代わりに、フォームや結果をデータベースに保存し、ある種のパーマリンクメカニズム( '' http:// localhost/shoes?filter = 25 ")。いずれにしても、これがSEOにどのような影響を与えるかはわかりません。私はまだそれを言った記事を見たいと思う。 – Laurens
私はwill_paginate gemを使用しています(そして、私は例として示す描画リンクを表示します)。だから... will_paginate + ajaxを使ってみてください。 –