1

この質問には明らかな答えがあるかもしれません...しかし、どこを見ればよいのかわかりません。

何らかの理由で、railsは一部のリダイレクトで空のクエリ文字列をURLに追加しています。ユーザーの「ダッシュボード」ページがあり、ボタンをクリックして新しい「foo」を作成できます。

ボタンをクリックしてこのパスに移動すると、URLは「localhost / foo / new?」になります。

このファントムクエリパラメータがどこから来ているのかわかりません...それが大したことかどうかさえわかりませんが、何らかの理由で、キャッシングまたはSEOの面で私を傷つける可能性があると感じています。誰かがどこを見るべきかについていくつかの指針を持っていますか?

更新1

new_fooアイテムへのリンクを生成するために使用しているコード(HAMLとブートストラップを使用):

= button_to "New Foo!", new_foo_path, :method => :get, :class => btn_class

コントローラのコードは次のようになります。

def new
  @foo = Foo.new(:my_attribute => 2500)
end

2番目のコメントについて-このオブジェクトがこの時点でデータベースに保持されるとは思いませんか?Railsのobject.newメソッドはそれをメモリに構築したばかりで、#saveまで永続化されないと思いました。

更新2

コードを「link_to」に変更すると、問題は解決したようです...これについて説明していただけますか?

4

1 に答える 1

2

button_toはlink_toとは異なります。button_toは、実際にページにフォームを作成します。フォームは次のようになります。

<form action="/foo/new" class="button_to" method="get">
   <div><input type="submit" value="abc"></div>
</form>

これはgetフォームであり、[送信]をクリックすると、フォーム内の入力フィールドがパラメーターとして使用されます。アクションのクエリは使用されません。例えば:

= button_to new_foo_path(:test => true)
#=> <form action="/foo/new?test=true" class="button_to" method="get">
      <div><input type="submit" value="abc"></div>
    </form>

[送信]をクリックすると、URLは「/ foo / new?」になり、test=trueはなくなります。それはhtmlの専門です。より多くの例があなたを理解させるかもしれません。

= form_tag(new_foo_path(:test => true), :method => :get) do
   = hidden_field_tag "field_in_form", "true"
   = submit_tag "submit"

[送信]をクリックした後。URLは「/foo/ new?field_in_form = true」になります。「?」get form contains input(include submit_tag)を送信すると常に表示されます。

于 2012-04-25T09:43:22.063 に答える