【发布时间】:2011-11-22 18:12:01
【问题描述】:
我在听 Hypercritical 时听说了这个社区,我很高兴能加入我的第一个问题。我正在开发我的第一个 Rails 应用程序,但遇到了一个似乎无法解决的问题。我已经看 Railscast、Lynda.com 和谷歌搜索好几天了,但我仍然无法理解如何创建一个可以立即更新我的 has_many :through 关联的表单。请允许我尝试解释一下我在做什么。
我的目标: 我工作的公司提供了许多“服务产品”,我希望能够在一个页面上创建一个新的服务产品,并让它创建与之关联的联系人和其他信息。诸如“联系人”之类的附加信息将存在于它们自己的表中,因为它们可能需要被许多“服务产品”引用。
问题: 当我提交表单时,“服务产品”字段提交并输入到数据库中,但“业务开发人员”的字段没有。显然,我希望将所有内容输入到相应的表中,并将 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%>
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 nested-forms nested-attributes