我在听Hypercritical时听说过这个社区,我很高兴能够加入我的第一个问题。我正在开发我的第一个Rails应用程序,并且遇到了一个我似乎无法解决的问题。我一直在观看Railscast,Lynda.com和谷歌搜索几天,但我仍然无法理解如何创建一个可以更新我的has_many的表单:通过一次关联。请允许我尝试解释我在做什么。嵌套模型表单没有提交所有内容
我的目标: 我所在的公司提供了许多“服务内容”,我希望能够在一个页面上创建一个新的服务产品,并将它创建一个与之关联的联系人等信息。诸如“联系人”之类的附加信息将存在于他们自己的表格中,因为它们可能需要被许多“服务提供”所引用。
问题: 当我提交了“服务产品”领域提交并输入到数据库的形式,但对于“商业开发”的字段不。很显然,我希望将所有内容输入到适当的表格中,并且要在连接表格中链接ID。我真的很感激你能提供的任何见解。
我到目前为止:您在下面看到的是服务产品和业务开发人员。最终我会添加通讯录,照片和文件,但我认为我会开始简单地工作。
型号:
class ServiceOffering < ActiveRecord::Base
attr_accessible :name, :description
has_many :business_developer_service_offerings
has_many :business_developers, :through => :business_developer_service_offerings
accepts_nested_attributes_for :business_developer_service_offerings
end
class BusinessDeveloper < ActiveRecord::Base
attr_accessible :first_name, :last_name
has_many :business_developer_service_offerings
has_many :service_offerings, :through => :business_developer_service_offerings
end
class BusinessDeveloperServiceOffering < ActiveRecord::Base
belongs_to :business_developer
belongs_to :service_offering
end
控制器:
def new
@service_offering = ServiceOffering.new
@service_offering.business_developers.build
end
def create
@service_offering = ServiceOffering.new(params[:service_offering])
if @service_offering.save
redirect_to(:action => 'list')
else
render('new')
end
end
查看:
<%= form_for((@service_offering), :url => {:action => 'create'}) do |f|%>
<p>
<%= f.label :name%>
<%= f.text_field :name %>
<%= f.label :description%>
<%= f.text_field :description %>
</p>
<%= f.fields_for :business_developer do |builder| %>
<p>
<%= builder.label :first_name%>
<%= builder.text_field :first_name %>
<%= builder.label :last_name%>
<%= builder.text_field :last_name %>
</p>
<%end%>
<%= f.submit "Submit" %>
<%end%>
我用更多的解释更新了我的答案。你应该阅读,这是肯定更清楚:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for – Damien