【问题标题】:Rails 3. How can I only display one nested model form?Rails 3. 如何只显示一个嵌套模型窗体?
【发布时间】:2012-03-08 16:19:46
【问题描述】:

我有这两个模型:Company 和 CompanyContact。

所以我有平常的...

companies_controller.rb
def edit
  @company = Company.find(params[:id])
  student = @company.students.build
  company_contact = @company.company_contacts.build
end

company.rb
has_many :company_contacts, :dependent => :destroy
accepts_nested_attributes_for :company_contacts, :reject_if => :reject_company_contacts, :allow_destroy => true

company_contact.rb
belongs_to :company

form.html.erb
<%= f.fields_for :company_contacts do |builder| %>
  <%= render "company_contact_fields", :f => builder %>
<% end %>

_company_contacts.html.erb
<p style="margin:5px 0;">
  <%= f.label :first_name %><br />
  <%= f.text_field :first_name, :class => 'text_field' %>
</p>

<p style="margin:5px 0;">
  <%= f.label :email %><br />
  <%= f.text_field :email, :class => 'text_field' %>
</p>

在编辑表单中,如果我已经有一家公司的公司联系人,它会为我提供现有记录以及另一个准备填写的空公司联系人表单。没关系,因为它应该发生。

我需要做的是只有一个公司联系人,所以如果已经有一个公司联系人,我不想显示另一个表单来添加额外的公司联系人。我不想建立 has_one 关系,因为我的客户将来可能想添加额外的公司联系人,而且当我尝试 has_one 关系时,我遇到了一堆错误。

好的,所以每个公司只有一个公司联系人,我尝试了一个计数器解决方案,你知道在循环中设置 counter = 0 然后检查 counter > 0 但那个“解决方案”不起作用。你有什么建议?

【问题讨论】:

    标签: ruby-on-rails ruby forms


    【解决方案1】:

    如果我猜对了,那么

    @company.company_contacts.build unless @company.company_contacts.present?
    

    是您正在寻找的。

    这样,如果公司已经有联系人,则不会再建立联系人。同样,如果公司没有联系人,这将建立联系人,然后f.fields_for :company_contacts 将使用这些联系人在表单中呈现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2012-03-10
      相关资源
      最近更新 更多