Ruby on rails 以“创建”的形式创建两个关联模型;属于;一个(轨道)
希望我连续提出的问题不会对任何人造成问题,我想请您帮助我如何从一种形式创建两个模型 这两个相关模型是Ruby on rails 以“创建”的形式创建两个关联模型;属于;一个(轨道),ruby-on-rails,forms,rails-activerecord,Ruby On Rails,Forms,Rails Activerecord,希望我连续提出的问题不会对任何人造成问题,我想请您帮助我如何从一种形式创建两个模型 这两个相关模型是 class Employee < ActiveRecord::Base attr_accessible :name belongs_to :company attr_accessible :company_id end class Company < ActiveRecord::Base attr_accessible :name has_many :emp
class Employee < ActiveRecord::Base
attr_accessible :name
belongs_to :company
attr_accessible :company_id
end
class Company < ActiveRecord::Base
attr_accessible :name
has_many :employees
end
和employees\u controller.rb
def new
@employee = Employee.new
@company = Company.new
end
def create
@employee = Employee.new(params[:employee])
@company = Customer.find_or_create_by_name(params[:company][:name])
@company.employees << @employee
@company.save
@employee.save
end
[……]
这是员工和公司(持有公司id的员工)之间的某种关联,但它不会创建(或者,如果我理解得很好的话,实际上不会拯救)公司
如果我继续在id分配之前添加@company.save
,一切似乎都正常。然而,是吗?我是否应该提交新公司表格
,并在提交后保存所有内容
我整天都在网上搜索解决方案,但每次都是以相反的方式实施:如何从新的公司形式创建一批员工。还有很多方法要走,这里有一个:
def Employee << ActiveRecord::Base
def title
return nil
end
end
<%= simple_form_for(@employee) do |f| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= f.input :title, label: 'Company Name', :required => true %>
<%= f.submit 'Create'
<% end %>
有很多路要走,这里有一条:
def Employee << ActiveRecord::Base
def title
return nil
end
end
<%= simple_form_for(@employee) do |f| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= f.input :title, label: 'Company Name', :required => true %>
<%= f.submit 'Create'
<% end %>
好的,经过大量的实验,我得出以下结论:
employees/\u form.html.erb
<%= simple_form_for(@employee) do |f| %>
<%= simple_form_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
<%= simple_form_for(@employee) do |f| %>
<%= simple_fields_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
它比@RadBrad提供的答案稍微优雅一些,但也受到它的影响
如果您需要知道如何实际填写
公司
模型的所有属性,请遵循好的,经过大量实验,我得出以下结论:
employees/\u form.html.erb
<%= simple_form_for(@employee) do |f| %>
<%= simple_form_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
<%= simple_form_for(@employee) do |f| %>
<%= simple_fields_for(@company) do |cf| %>
<%= f.input :name, label: 'Employee Name', :required => true %>
<%= cf.input :title, label: 'Company Name', :required => true %>
<% end %>
<% end %>
它比@RadBrad提供的答案稍微优雅一些,但也受到它的影响
如果您需要知道如何实际填写
公司
模型的所有属性,请遵循您不能将表单放入表单中,因此我将开始重新考虑仅使用一个简单的表单来表示“您不能”,如“这不是最佳实践”中的“您不能”?因为字段实际上是显示的,属性也发送得很好。我认为这比“非最佳实践”更严重,W3C XHTML官方规范明确不允许这样做。它以微妙而难以察觉的方式打破了浏览器!谢谢你的通知,我的坏习惯是“盲目”遵循别人的代码。为了记录在案,我将内部表单更改为“simple\u fields\u For”。(问题更新)我发布了一个答案,刷新它,因为第一个版本有一个bug!你不能把一个表单放在一个表单中,所以我会开始重新考虑输入的表示,只使用一个简单的表单来表示“你不能”,就像在“这不是最佳实践”中一样?因为字段实际上是显示的,属性也发送得很好。我认为这比“非最佳实践”更严重,W3C XHTML官方规范明确不允许这样做。它以微妙而难以察觉的方式打破了浏览器!谢谢你的通知,我的坏习惯是“盲目”遵循别人的代码。为了记录在案,我将内部表单更改为“simple\u fields\u For”。(问题更新)我发布了一个答案,刷新它,因为第一个版本有一个bug!employee
模型没有:title
属性,因此上面的表单为employee提供了一个未定义的方法“title”。您的注释不清楚,我发布了一个补丁,展示了如何伪造simple_form_,以设置模型中不存在的属性。在您将def title
方法添加到员工模型中之前,我发表了评论。虽然这种方法在我这个没有经验的人看来像是“作弊”,但它完全有道理。非常感谢-我一测试它就会接受。employee
模型没有:title
属性,因此上面的表单为employee
提供了一个未定义的方法“title”。您的评论不清楚,我发布了一个补丁,展示了如何伪造simple_form_,以设置模型中不存在的属性。在您将def title
方法添加到员工模型中之前,我发表了评论。虽然这种方法在我这个没有经验的人看来像是“作弊”,但它完全有道理。非常感谢-我一测试就接受。