Rails 4 - 在嵌套表单中创建关联记录但不创建父记录

时间:2015-04-14 03:26:57

标签: ruby-on-rails ruby-on-rails-4

在Rails 4嵌套表单中 - 当您的公司已经存在时,我想为许可证(公司has_many许可证)创建新记录。我如何实现它?

型号 - 公司.rb

class Company < ActiveRecord::Base
  has_many :licenses 
end

Model License.rb

class License < ActiveRecord::Base
  belongs_to :company
end

license_controller.rb

def new
  @company = Company.new
  Role.user_role_names.each { |role|  
    @company.licenses.build(license_type: role) 
  }
  @licenses = @company.licenses
end

许可证/视图/ new.html.erb

<%= form_for @company, url: licenses_path, method: "post" do |f| %>
 <%= f.select :id, Company.get_all_companies, :include_blank => 
  "Select Company", required: true %><br/><br/>

<% @licenses.each do |license|%>
  <%= f.fields_for :licenses, license do |lic| %>
  <div style="border:1px solid; border-radius:10px;width:300px">
    <%= lic.hidden_field :license_type %>

    <%= lic.label :total_licenses, license.license_type.split("_").join(" ").capitalize + " License number"%><br/>
    <%= lic.text_field :total_licenses %><br/><br/>

    <%= lic.label :duration, 'Duration Validity' %><br/>
    <%= lic.text_field :duration %>days<br/><br/>  

  </div>        
<% end %>
<% end %>
<br/><%= f.submit 'Assign'%>&nbsp;
<%= link_to :Back, users_super_admin_index_path %>
<% end %>

如果您可以帮助我了解如何为所选的现有公司创建许可证记录并公司未创建

1 个答案:

答案 0 :(得分:0)

@company = Company.new应该写在companies_controller而不是license_controller中。

当从选择框中选择公司时,在隐藏变量中设置其值,通过js,从下拉列表中选择公司。因此,当提交表单时,它具有@company,所以声明:@licenses = @ company.licenses将正常工作,因为它具有@company值。