2012-04-25 14 views
1

この質問には明らかな答えがあるかもしれませんが、どこを見るかわかりません。URLに空のクエリパラメータ(/ new?)を追加しているレール

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

このパスに移動するためにボタンをクリックすると、URLに "localhost/foo/new?"と表示されます。

私はこのファントムクエリパラメータがどこから来ているのかわかりません....それは大きな問題であるかどうかわかりませんが、何らかの理由で私はキャッシュやSEOで私を傷つける可能性があると感じています終わり。誰にどこを見ていくつかのポインタがありますか?

UPDATE 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オブジェクトと考えました。新しいメソッドはメモリ内に構築したもので、#saveまで永続化されません。

UPDATE問題がなくなっているようだ「のlink_to」にコードを変更するには2

...あなたはこれを説明できますか?

+0

新しいfooリンクを生成するためにnew_fooヘルパーを呼び出すときに使用しているコードを追加できますか? – spike

+0

'foo'がデータベースに永続化されているかどうか確認してください。 – luacassus

+0

コメントありがとうございます - 私は質問に追加の詳細を追加しました。私はそれを理解したかもしれないかもしれませんが、理由を知らないのです! @luacassus - 私はオブジェクトがこの時点でデータベースに保持されるとは思わないでしょう...通常、新しいアクションはフォームのメモリにオブジェクトを作成しますか? – Brandon

答えて

2

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

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

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

= 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?"になり、テストは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"になります。私は "?"入力フォームを含むフォームを送信すると常に表示されます(include submit_tag)。

+0

詳細な回答ブレードをありがとう。私は今これを扱っていると思う! – Brandon

関連する問題