2011-12-23 60 views
0

在Rails 3.0中,我有標準的「新」表單來創建新記錄,在這種情況下是病人。它工作正常,驗證/錯誤顯示也工作正常。Rails:兩個獨立的創建窗體..如何讓它們分開?

客戶現在想用西班牙文形式。

所以,我這樣做:

  1. 創建一個名爲「newspanish」一個新的HTML文檔(剪切/粘貼代碼從「患者/新」)
  2. 創建一個新的部分稱爲「_form_newspanish」和引用它在「newspanish」(從視圖「患者/ _form」剪切/粘貼代碼)
    1. 在「患者」中創建一個名爲「newspanish」的控制器操作,並從「新「行動。
    2. 我沒有觸動「創建」動作。
  3. 在路線中添加了匹配「patients/newspanish」。
  4. 將英語部分翻譯成西班牙語,以views/newspanish和views/_form_newspanish。只是用戶在頁面上閱讀的東西,當然......不是欄杆代碼。

而且,它的工作,完美提交。

對於未通過驗證的提交(如將3位數字作爲電話號碼),該頁面將恢復爲「患者/新」視圖,並在英文中顯示錶格上方的錯誤...當然,因爲患者/ new是英文。

當然,我希望它恢復到「views/newspanish」,並在驗證錯誤(西班牙語)中顯示自定義的verbage。

任何想法如何讓我的病人/ newspanish視圖加載時,錯誤驗證它絆倒?

這裏是我的代碼爲 「_form_newspanish」

<%= form_for(@patient) do |f| %> 

<% if @patient.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@patient.errors.count, "error") %> prohibited this subscriber from  being saved:</h2> 

     <ul> 
     <% @patient.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 


    <p><label for="mobile">Número de teléfono celular o móvil*</label>: <%= f.text_field :mobile %></p> 
    <br /> 
    <%= f.submit "Inscribirme" %> 
    </div> 
<% end %> 

和控制器......患者/ newspanish

def newspanish 
    @patient = Patient.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @patient } 
    end 
    end 
+0

???並提供西班牙語yml語言環境文件?看到這裏:http://guides.rubyonrails.org/i18n.html – dmcnally 2011-12-23 21:38:32

回答

1
<%= form_for(@patient) do |f| %> 

創造其URL是提交給爲「/患者的一種形式「這與patient_controller匹配,創建操作。

創造行動可能有這樣一行(在我的僞代碼)

if @patient.save 
redirect to somewhere 
else 
render :new 
end 

這條線「渲染:新的」正顯示出「患者/新」的說法。

所以,你必須弄清楚什麼是要麼 1)檢測patients_controller#創建如何判斷它的西班牙語,並呈現「newspanish」

OR

2)改變<%= form_for(@patient) do |f| %>提交一個新的URL,只處理西班牙語版本,並創建一個新的控制器或操作,只是處理西班牙語形式(並呈現「newspanish」,如果@病人不保存

對於#2,您可以手動更改位置表格提交給

<%= form_for(@patient), :url => spanish_patients_path do |f| %> 

,並在你的路由創建

post "patients/spanish" => "patients#create_in_spanish" 

,並添加def create_in_spanish到你爲什麼不只是使用的I18n你的病人控制器

+0

這是偉大的..謝謝!只是爲了存檔,我使用了上面的if/else/end..and else,我讓Rails檢測用戶是否在'西班牙'流中......然後呈現「新」或「新聞」 。謝謝!! – DougN 2011-12-27 14:53:50

相關問題