1

Railsアプリにsimple_formがあり、一部のフィールドにURLパラメーターを事前入力したいと考えています。

URLの例は次のとおりです。

http://localhost:3000/surveys/new?phone=8675309

これにより、次のコードを使用して電話フィールドに正しく事前入力されます。

<%= simple_form_for @survey, :html => { :class => 'form-horizontal' } do |f| %>
<%= f.input :state, :required => true %>
<%= f.input :zip, :required => true %>
<%= f.input :phone, :required => true, :input_html => { :value => params['phone'] } %>
<% end %>

問題は、フォームが必須フィールドなしで送信された場合、フォームは再ロードされますが、電話の入力値は保持されないことです。

フォームがzipの値なしで送信された場合、赤いURLの検証エラーでリロードされたページは次のようになります。

http://localhost:3000/surveys

たとえば、状態フィールドは正しいが郵便番号がない場合、フォームはzipが必要であるというエラーメッセージとともに再読み込みされます。

状態値は保持されますが、電話は保持されません。

電話のf.inputの:value =>params['phone']と関係があると思います。

とにかく、simple_formに初期ロード時にURLパラメーターを入力し、サーバー側の検証が失敗した場合にそれらの値を保持することができますか?

どうもありがとう。

4

2 に答える 2

0

ビューからを削除:valueします。

<%= f.input :phone, :required => true %>

次のURLを使用します。

http://localhost:3000/surveys/new?survey[phone]=8675309

これにより、コントローラーが期待する「標準」surveyパラメーターハッシュが生成されます。私のテストでは、これはユーザーが値を入力した場合と同じように機能し、通常の検証処理が行われます。

コントローラ内では、ハッシュは、、などでparams[survey]表される個々のパラメータで呼び出されます。params[survey][phone]params[survey][zip]

この回答の助けを借りて、link_to署名を使用してURLを生成できることがわかりましたlink_to(body, url_options = {}, html_options = {})

<%= link_to 'New survey', { :controller => "surveys", 
                            :action => "new", 
                            :survey => { :phone => "8675309", :zip => "10001" } },
                          { :target => "_blank" } %>

これurl_optionsが最初のハッシュであり、そのハッシュ内にsurvey値をプリロードするためのハッシュがあることに注意してください。最後に、のオプションのハッシュがあります(説明のためhtml_optionsに追加しました)。target="_blank"

于 2012-11-08T02:32:36.203 に答える
0

ありがとうマーク、

私はしばらく前にこの質問を再度投稿しました、そしてそれはここで正直に答えられました:

Railssimple_formサーバー側の検証で失われたURLパラメーター

于 2012-11-08T09:44:34.917 に答える