所以我有一个模型叫做 City and it has_many :places
and it accepts_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 的建议,但不知道如何执行此操作。