在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'%>
<%= link_to :Back, users_super_admin_index_path %>
<% end %>
如果您可以帮助我了解如何为所选的现有公司创建许可证记录并公司未创建?
答案 0 :(得分:0)
@company = Company.new应该写在companies_controller而不是license_controller中。
当从选择框中选择公司时,在隐藏变量中设置其值,通过js,从下拉列表中选择公司。因此,当提交表单时,它具有@company,所以声明:@licenses = @ company.licenses将正常工作,因为它具有@company值。