Rails 3从单一模型和方法创建多个记录条目

问题描述:

我已经在这一天了一天了,我希望有人能帮助我。我是ruby/rails的新手,我想我正在接近。Rails 3从单一模型和方法创建多个记录条目

我有一个看法,而您可以输入有关公寓的基本信息,如单位数量,费率(如果已启用)。然后,您可以输入您想要创建的公寓数量。这些信息被放置到会话变量中,并显示一个预览窗体。例如,如果您输入了5个想要创建的公寓数量,则会在表格中获得5行,每个行的单元号,速率和已启用标题。然后,您可以根据需要对任何单独的公寓进行修改,然后单击保存。

/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 

我真的没有我的拯救方法创建呢。我将拿出我所拥有的东西,一次只能保存最后录入的记录,但我知道这一点都是错误的。

/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 

在我preview.html.haml形式我甩@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数组在我的预览视图中没有正确访问。它实际上看起来像我的预览视图传递参数,因为我期望的save_preview post方法。

任何帮助,我打我的头靠在墙上。谢谢...

我会使用嵌套的形式。将这些单元拆分成一个单独的模型,并且具有像块(块)那样的许多单元。然后你可以使用复杂的形式输入所有信息。

参见:http://railscasts.com/episodes/196-nested-model-form-part-1

块模型可容纳整个块的尺寸和单元模型可以容纳关于该特定单元的细节。

+0

好吧,做一些事情就像创建一个建筑模型,它可以容纳任何有关该建筑物的信息,然后建造has_many公寓。这真的是我唯一的选择,还是最简单的方法?还有更多我认为你是对的。谢谢! – 2012-04-11 02:35:17

+0

这是最简单和最好的做事方式。记住,如果模型太难了,那么你很可能不得不将它分成不同的模型。 – map7 2012-04-11 03:56:48