将字段添加到嵌套表单

时间:2012-07-14 19:25:09

标签: ruby-on-rails-3 formbuilder

所以我有一个名为City的模型,has_many :placesaccepts_nested_attributes_for :places。每个地方belongs_to :category。当我为一个城市渲染表格时,我有f.fields_for :places do |place|,我这样做:

<% f.fields_for :places do |place| %>
  <%= render "place_fields", :f => place
<% end %>

我的_place_fields.html.erb包含以下内容:

<div class="place_header"><%= f.object.category.name %></div>
<div><%= f.label :name %>: <%=f.text_field :name %> </div>
<div><%= f.text_area :description %> </div>

但是当我尝试添加新地点时,问题出现了。首先,我想提出一个简单的选择表单来为新地点选择一个类别,然后根据category_id渲染相同的部分。 我在同一个动作中这样做:

def add_place
  if params[:category_id]
    @place = Place.new(:category_id => params[:category_id])
    respond_to do |format|
      format.html { return nil }
      format.js {
        #here comes the render
      }
    end
  else
    render_message :header => "Choose category", :partial => "category_select", :over => 10
  end
end

但是,如果我尝试$("#places_tab").append("<%= escape_javascript(render :partial => "place_fields", :f => @place %>");,它就会出错,这是预期的。

再一次:我需要为新地方渲染字段,而不知道该怎么做。

更新

收到一些建议,将原来的City Formbuilder传递给该动作并从该构建器呈现该Place,但不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

问题是您将Place模型的实例(@place)作为表单构建器而不是表单构建器本身传递。