2011-12-23 14 views
0

Rails 3.0では、新しいレコード(この場合は患者)を作成する標準の「新しい」フォームがあります。それは正常に動作し、検証/エラー表示も正常に動作します。Rails:2つの独立したフォームを作成して、それらを別々に保つ方法は?

クライアントは現在、スペイン語でフォームを必要としています。 「newspanish」と呼ばれる新しいHTMLドキュメント(「新規患者/」からのカット/ペーストコード)

  • 新しい部分と呼ばれる「_form_newspanish」を作成し、参照を作成し

    1. だから、私はこれをしませんでした

      1. 「新聞」と呼ばれる「患者」にコントローラアクションを作成し、「患者」の「患者」に「コントローラ」アクションの正確なコードを貼り付けて貼り付けました。新しい "アクション。
      2. 「作成」アクションはそのまま残しました。
    2. 「患者/新聞」をルートに追加しました。
    3. 英語の部分をビュー/新聞とビュー/ _form_newspanishでスペイン語に翻訳しました。もちろん、ユーザーがページで読んでいるだけのものです...レールコードではありません。

    そして、完全な提出のために動作します。

    (電話番号として3桁の数字を入力するなど)検証に失敗した場合、ページはビュー「patients/new」に戻り、フォームの上のエラーを英語で表示します。もちろん、患者/ newは英語です。

    もちろん、私はそれを "views/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

    def create_in_spanishを追加します?スペイン語のymlロケールファイルを提供していますか?こちらをご覧ください:http://guides.rubyonrails.org/i18n.html – dmcnally

    答えて

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

    は、そのURLで提出へ「/患者でフォームを作成しているため私のコードですpatients_controllerに一致するアクションを作成します。 「患者さん/新しい」ビューを示している:「新しいレンダリング」行のアクションはおそらく(私の擬似コードで)という行を持って作成

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

    だから、何を把握しているのは 1のいずれかにある)patients_controller#で検出し、そのスペイン語の場合は教えてどのように作成し、に提出する「newspanish」

    OR

    2)変更<%= form_for(@patient) do |f| %>をレンダリングスペイン語のバージョンを扱う新しいURLと、スペイン語のフォームを処理する新しいコントローラまたはアクションを作成します(@patientが保存しない場合は "newspanish"をレンダリングします)

    #2では、フォームは

    に送信されます
    <%= form_for(@patient), :url => spanish_patients_path do |f| %> 
    

    とあなたのルートで

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

    を作成して、あなただけの国際化を使用していないのはなぜあなたの患者コントローラ

    +0

    これは素晴らしいですね。アーカイブのために、私は上記のif/else/end..を使いました。そしてelseでは、ユーザーが 'spanish'ストリームに入っているかどうかを検出しました。そして、 "new"または "newspanish" 。ありがとう!! – DougN