2012-04-11 1 views
0

私はこれを1日以上実行しています。誰かが私を助けてくれることを願っています。私はルビー/レールが新しく、近いと思う。Rails 3では、単一のモデルとメソッドから複数のレコードエントリを作成します

アパートについての基本情報(ユニット番号、料金など)を入力できるのに対して、これは有効です。作成するアパートメントの数を入力することができます。この情報はセッション変数に格納され、プレビューフォームが表示されます。例えば、あなたが作成したいマンションの数に5を入力した場合、テーブルに5つの行が表示され、それぞれにUnit Number、Rate、Enabledの見出しが付けられます。その後、個々のアパートに必要に応じて変更を加え、[保存]をクリックします。私は本当に私のまだ作成方法を保存していない

/app/models/apartment.rb

def preview 
    @count = session['count'].to_i 
    @mktg_apartment = [] 
    1.upto(@count) do |i| 
    @mktg_apartment[i] = Apartment.new 
    @mktg_apartment[i].rate = session['tmp_rate'] 
    @mktg_apartment[i].enabled = true 
    end 
end 

/app/views/preview.html.haml

=form_for @mktg_apartment, :url => {:action => 'save_preview', :method => 'post'} do 
    - 1.upto(@count) do |x| 
    text_field "mktg_apartment[#{x}]", :unit 
    text_field "mktg_apartment[#{x}]", :rate 
    text_field "mktg_apartment[#{x}]", :enabled 

。私は何を持っているのかを出しますが、最後に入力したレコードだけを保存することもありますが、この時点ですべてが間違っていることがわかります。私preview.html.hamlフォームで

/app/model/apartment.rb

def save_preview 
    @mktg_apartment = Mktg::Apartment.new(params[:mktg_apartment]) 
    respond_to do |format| 
    if @mktg_apartment.save 
     format.html { redirect_to mktg_apartments_path } 
    else 
     format.html { render action: "preview" } 
    end 
    end 
end 

私は@mktg_apartmentをダンプし、以下を参照してください。

[nil, #<Mktg::Apartment id: nil, created_at: nil, updated_at: nil, unit: nil, rate: 1222.0, enabled: true>, 
#<Mktg::Apartment id: nil, created_at: nil, updated_at: nil, unit: nil, rate: 1222.0, enabled: true>, 
#<Mktg::Apartment id: nil, created_at: nil, updated_at: nil, unit: nil, rate: 1222.0, enabled: true>, 
#<Mktg::Apartment id: nil, created_at: nil, updated_at: nil, unit: nil, rate: 1222.0, enabled: true>, 
#<Mktg::Apartment id: nil, created_at: nil, updated_at: nil, unit: nil, rate: 1222.0, enabled: true>] 

私はそれでエラーが出て保存ヒットすると投稿フォームに次のパラメータが渡されていることがわかります:

{"utf8"=>"✓", 
"authenticity_token"=>"iGLdu/ZmulcLp4xZEU4a4iuxWV1opzNIyXcnZEQCtj8=", 
"mktg_apartment"=>{"1"=>{"unit"=>"", 
"rate"=>"", 
"enabled"=>"0"}, 
"2"=>{"unit"=>"", 
"rate"=>"", 
"enabled"=>"0"}, 
"3"=>{"unit"=>"", 
"rate"=>"", 
"enabled"=>"0"}, 
"4"=>{"unit"=>"", 
"rate"=>"", 
"enabled"=>"0"}, 
"5"=>{"unit"=>"", 
"rate"=>"", 
"enabled"=>"0"}}, 
"commit"=>"Save", 
"method"=>"post"} 

pプレビュー表示で@mktg_apartmentの配列にプレビュービューで正しくアクセスできません。私のpreview_viewは、save_previewのpostメソッドに期待していたように、パラメータを渡しているようです。

助けてください、私は壁に頭を打っています。ありがとうございました...

答えて

1

ネストされたフォームを使用します。単位を別々のモデルに分割し、土地ブロック(ブロック)のようなものには多くの単位があります。次に、複雑な形式を使ってすべての情報を入力することができます。

を参照してください。http://railscasts.com/episodes/196-nested-model-form-part-1

ブロックモデルは、特定のユニットについての詳細を保持することができ、ブロック全体の大きさと単位モデルを保持することができました。

+0

[OK]をクリックすると、その建物に関する情報を保持する建物モデルを作成し、次にhas_manyアパートメントを作成するような操作を行います。それは本当に私の唯一のここに、またはこれを行うための最も簡単な方法ですか?あなたが正しいと思うほど、私はそれについてもっと考えます。ありがとうございました! –

+0

これは最も簡単で実践的な方法です。モデリングが難しい場合は、別のモデルに分割する必要があります。 – map7

関連する問題