2012-05-13 32 views
1

我在我的Rails應用程序中有一個simple_form,我想預先使用URL參數填充 某些字段。Rails simple_form在服務器端表單驗證期間丟失了預填充的輸入值

例URL是:

<%= 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 %> 

問題是如果窗體不必填字段提交 形式是:

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

這corretly使用此代碼預填充電話字段重新加載但手機輸入值不被保留。

如果表格沒有值提交拉鍊 與紅色URL驗證錯誤重新加載頁面現在是:

http://localhost:3000/surveys 

比如說,如果狀態字段是正確的,但沒有郵政編碼的形式是請重新加載 ,並附上錯誤消息,說明需要zip。

狀態值保留,但手機不是。

我想它必須在手機的f.input中使用:value => params ['phone']。

有無論如何,我可以用初始加載的URL參數 填充simple_form,並且如果服務器端驗證失敗,那麼這些值會保留嗎?

非常感謝。

回答

0

從您的視圖中刪除:value

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

,並使用這個網址:

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

這應該生成由控制器所期望的 「標準」 survey參數哈希值。在我的測試中,它的工作原理與用戶輸入值一樣,並且具有通常的驗證處理。

控制器內,哈希被稱爲params[survey]以表示爲params[survey][phone]params[survey][zip]個別參數等

隨着this answer的幫助下,我發現,你可以生成具有的link_to簽名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")。

相關問題