嵌套form_for

时间:2011-04-11 07:14:41

标签: ruby-on-rails resources form-for

我以这种方式组织项目:用户是主要资源,每个用户都有一个配置文件,每个配置文件有一个位置如下:

 resources :users do    
    resource :profile, :controller => "profiles" do
      resource :location
end

现在我必须构建一个表单,用于插入所有配置文件信息,但也包括位置信息(地址等)。 如果我编写以下代码,则不会关注该位置。

<%= form_for(@profile, :url=>{:action=>'update'}, :html => {:multipart => true}) do |f| %>

有人对这种情况有什么建议吗?

TNX

2 个答案:

答案 0 :(得分:5)

如果您想在同一表单中访问不同的模型,可以使用accepts_nested_attributes_for。以下是关于该主题的精彩截屏视频:http://railscasts.com/episodes/196-nested-model-form-part-1

您的代码应该是这样的。

#profile.rb

accepts_nested_attributes_for :location

在您看来:

<%= form_for(@profile, :url=>{:action=>'update'}, :html => {:multipart => true}) do |f| %>
   <%= f.fields_for :location do |l| %>
     //location fields here, for example:
     <%=l.text_field :city %>
   <% end %>
<% end %>

答案 1 :(得分:4)

使用:

form_for [@user, @profile, @location], :action => :update, :html => {:multipart => true}