-1

私はRailsの初心者で、必要に応じて医師が更新するフォームに患者情報を表示する必要があるアプリを開発しています。サイドバーのリストから患者を選択できるとすぐに、最初に空のフォームだけを表示したいと思います。患者が選択されると、すべての情報が表示されます。

私が推測できる唯一の方法は、最初に空のフォームを表示し、患者が選択されたら、コントローラーで患者をキャッチし、ページをリロードして、フォームが患者情報を取得できるようにすることです。

誰かがより良いアイデアを持っていますか? 否定的な回答: 空のフォームを表示するにはどうすればよいですか?

お時間をいただきありがとうございます。

よろしくお願いします。

更新:これは、ページに表示しようとしているフォームです。@patient は、ページが表示されるとまだ定義されていないインスタンス変数です。医師が横のリストから患者を 1 人選択すると表示されます。

<div class="row">                                                                               
  <div class="span6">                                                                           
    <%= render 'shared/error_messages' %>                                                      
    <div>                                                                                       
    <%= form_for(@patient) do |p| %>                                                            
      <%= text_field_tag 'patient[name][]', nil, :placeholder => "name", :style =>height:12px;font-size:10px;" %>                                                                             
      <%= text_field_tag 'patient[name][]', nil, :placeholder => "surname", :style =>"height:12px;font-size:10px;" %>                                                                          
      <%= p.text_field :email, :placeholder => "email", :style => height:12px;font-size:10px;" %>                                                                                              
    <%= p.text_field :phone, :placeholder => "phone", :style => height:12px;font-size:10px;" %>                                                                         
      <%= check_box_tag :active %>                                                              
      <%= check_box_tag :sex, 'male' %>                                                         
      <%= check_box_tag :sex, 'female' %>                                                       

      <%= chack_box_tag :dao %>                                                                 
      <%= p.submit "Sumbit", class: "btn btn-small btn-primary pull-right", id: "boton" %>      
    <% end %>                                                                                   
    </div>                                                                                      
  </div>                                                                                        
</div>

ここが問題です。on が選択されているため、コントローラーで @patient=nil としてページがクラッシュします。

再度、感謝します。

4

2 に答える 2

1

もう1つのオプションは、フォーム自体でオブジェクトをインスタンス化できることだと思います:

<%= form_for(Patient.new) do |p| %>

ありがとう

于 2013-08-13T17:55:42.833 に答える
1

ここで説明しているのは、モデルの基本的なコントローラー アクションです。

  • 空のフォーム: 患者コントローラの #new アクション
  • 入力済みフォーム: #edit action on Patients コントローラー

編集:提案されたUXを達成するための新しい戦略

コンポーネント 1: 既存の患者のナビリスト

  1. 患者オブジェクトのコレクションを繰り返し処理し、各患者のリンクをその編集ビューに出力します。link_to patient.name, edit_patient_path(patient)
  2. この nav ビューは、PatientsController の #new アクションと #edit アクションのビュー テンプレートに含めるパーシャルになります。

コンポーネント 2: 存在しない/新しい患者のための空のフォーム

  1. コントローラーの new アクションで、 so のように新しい Patient オブジェクトをインスタンス化します@patient = Patient.new
  2. 上記のビュー コードで行ったように、その @patient インスタンス変数で患者フォームをレンダリングします。
  3. ビューの部分として既存の患者のナビゲーション リストを含めます。

コンポーネント 3: 既存の患者の記入済みフォーム

  1. コントローラの編集アクションで、患者インスタンス変数を so のようにインスタンス化します@patient = Patient.find(params[:id])
  2. 上記のビュー コードで行ったように、その @patient インスタンス変数で患者フォームをレンダリングします。
  3. ビューの部分として既存の患者のナビゲーション リストを含めます。

編集:足場の古いポイント

Rails ジェネレーターと scaffold を使用して基本的なフォームとビュー テンプレートをセットアップすることを強くお勧めします。コマンド ラインを介して、上記で説明した #new および #edit 用の適切なコントローラー アクションとビュー テンプレートを自動的に生成できます。

この記事を読む: http://viget.com/extend/rails-3-generators-scaffolding

次に、このチュートリアルに従ってください: http://railscasts.com/episodes/216-generators-in-rails-3

Rails 開発に慣れるにつれて、ジェネレーターと scaffold は、カスタマイズの必要性を満足させなくなる可能性があります。しかし、それらは素晴らしい出発点です。

参照: http://guides.rubyonrails.org/getting_started.html#getting-up-and-running

于 2013-08-13T16:53:56.813 に答える