Rails 3. Как я могу отображать только одну вложенную модель? - PullRequest
2 голосов
/ 08 марта 2012

У меня есть две модели: 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, я получил кучу ошибок.

Хорошо, поэтому, чтобы иметь только ОДИН контакт компании на компанию, я попробовал решение для счетчика, вы знаете в цикле set counter = 0, а затем проверьте, если счетчик> 0, но это «решение» не работает. Что бы вы предложили?

1 Ответ

0 голосов
/ 08 марта 2012

Если я правильно вас понял, то

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

- это то, что вы ищете.

Таким образом, если у компании уже есть контакт, то контакты больше не создаются.Аналогично, если у компании нет контакта, это создаст контакты, которые затем будут использоваться f.fields_for :company_contacts для визуализации в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...