0

我已经做了一天多了,我希望有人可以帮助我。我是 ruby​​/rails 的新手,我想我已经接近了。

我有一个视图,而您可以输入有关公寓的基本信息,例如单元号、费率(如果已启用)。然后,您可以输入要创建的公寓数量。此信息被放入会话变量中,并显示预览表单。例如,如果您输入 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

我还没有真正创建我的保存方法。我会拿出我所拥有的,在某一时刻它只会保存最后输入的记录,但我知道此时这一切都是错误的。

/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"}

所以看起来我在我的预览方法中设置的@mktg_apartment 数组在我的预览视图中没有被正确访问。它实际上看起来像我的预览视图正在将参数传递给我期望的 save_preview post 方法。

请任何帮助,我正在用头撞墙。谢谢...

4

1 回答 1

1

我会使用嵌套形式。将单位拆分成一个单独的模型,并有类似地块(block)的东西有很多单位。然后,您可以使用复杂的表格输入所有信息。

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

块模型可以保存整个块的大小,而单元模型可以保存有关特定单元的详细信息。

于 2012-04-11T02:03:05.323 回答