动态添加行(每行是关联的对象实例)

时间:2011-02-10 08:45:08

标签: ruby-on-rails ruby-on-rails-3

我有一个模型类'Market',它有很多产品:

class Market < ActiveRecord::Base
  has_many :products
end

产品型号:

class Product < ActiveRecord::Base
  belongs_to :market
end

在我的观点中 markets / new.html.haml markets / edit.html.haml 我想要一个新的/编辑市场的功能在表单中,在此表单中,我有一个“添加产品”按钮,当用户按下此按钮时,将在这样的表单中添加一行(每行是一个实例产品每个输入字段是产品(名称,价格,类别)的属性),在HTML代码中:

<div>
    <input type=text name="name" size=10 value="Name">
    <input type=text name="price" size=10 value="Price">
    <input type=text name="category" size=10 value="category">
<div>

<div>
   <input type=text name=z3 size=10>
   <input type=text name=z3 size=10>
   <input type=text name=z3 size=10>
<div>
...When "Add product" button pressed, a new row of product input fields (div block) is added
<br>
<input type="submit" name="Add" value="Add product">

如何以“市场”形式实现“动态添加产品行”功能?

在haml视图文件中:

=form_for :market do |form|
 ...
  =fields_for "product" market.product do |field|
    =fields.text_field :name
    =fields.text_field :price
    =fields.text_field :category
   /...When "Add product" button pressed, a new row of product input fields is added
  =field.submit "Add product"
form.submit "Save"

如果我将此haml文件用于新/编辑市场视图,该如何实现?

1 个答案:

答案 0 :(得分:2)

你需要的是一个nested_attributes。这是一个很长的阅读,但这里是railscast的链接:

http://railscasts.com/episodes/75-complex-forms-part-3

这是rails 3的更新railscast:

http://railscasts.com/episodes/196-nested-model-form-part-1分为两部分:)

如果您想立即深入了解代码:https://github.com/ryanb/railscasts-episodes/tree/master/episode-196