2011-01-17 6 views
1

他の多くの人々と同様に、私はRailsを初めて使い、質問があります。私は小規模な分析ラボのサンプルトラッカーに取り組んでいます。私はユーザーに多くのサンプルからなるバッチを提出したいと思います。私は一番上のページをバッチ・サブミッションへの単純なゲートウェイにしたい。私の一般的な計画は次のとおりです:開始番号の入力に基づいた動的なネストされたフォーム要素

  1. フロントページは、一括してサンプル数を求めます。ユーザーは番号を入力し、送信をヒットします。
  2. ユーザーがバッチ情報(サンプリング日付、実験名、バッチモデルなど)を入力できるフォームが生成されます。バッチフィールドの下には、最初の手順で示されたユーザーと同じ数の個別のサンプルIDが必要です。
  3. ユーザーがこれをすべて満たし、バッチとそのサンプルが送信時に作成されます。

私の感情モデルが反復ビューのフォーム要素を構築する方法を有しているホームページは、次に反復のサンプルを構築バッチコントローラへのパラメータのいくつかの並べ替えを通過しなければならないことです。これは正しい考えですか?どのようにモデルやコントローラに直接関係のないパラメータを渡すことができますか?私は同様の質問を見つけることができましたが、誰かが私を同じような問題やRailscastなどの解決策にリンクさせることができれば、とても感謝しています!

答えて

2

モデルを使用してフォームをバックアップする必要はありません。あなたのビューのために、あなただけの(HAMLで)この例のようなものをお勧めします:

- form_tag new_batch_path, :method => "get" do 
    = label_tag(:sample_count, "Number of samples:") 
    = text_field_tag(:sample_count, 3) 
    = submit_tag("Get Started!") 

そして、あなたのコントローラでは、とnew_batchビューを、あなただけのこのためparams[:sample_count]

- (params[:sample_count] || 5).to_i.times do |n| ... 

を参照することができますモデルに結び付けられていない(とにかく保存されているものはありません)、モデル検証を使用して値をチェックすることはできません。確認したいならば、あなたはバッチコントローラ内の検証をします - いずれかbefore_filter、または単にインラインとして:"ajsdgsd".to_iすべてのようなnil.to_i"".to_iやゴミがあなたない限り、0に等しい

@sample_count = params[:sample_count].to_i 
unless (1..10).include? @sample_count 
    flash[:error] = "A batch must contain between 1 and 10 samples." 
    redirect_to root_url 
end 

に留意されたいです。人々が0サンプルを指定できるようにしたい、このコードはかなり頑丈です

+1

ありがとう!私はあなたにお酒を借りている! 1つの迅速なフォローアップ:これはどのモデルにも束縛されていないので、たとえば、ホームページを担当するコントローラの上にコールバックを置いて、またはバッチコントローラで数値を検証するかどうかは、params [ :sample_count]は数値ですか? –

+0

恐ろしい!その飲み物を償還する方法を今分かりました。また、私はsample_countを検証する例を更新しました。 – gunn

0

は、これらのRailscastsシリーズを見てください:

"ネストしたモデルフォーム" スクリーンキャストされています新しい、私はこれらのものと最初に行くだろう。

関連する問題