Попытка использовать accepts_nested_attributes_for и has_and_belongs_to_many, но объединяющую таблицу не заполняется

отредактированный для ясности. Страница OSGi дала лучший простой ответ, чем мой

А простой ответ: Платформа услуг OSGi обеспечивает стандартизированную, ориентированную на компонент вычислительную среду для сотрудничающих сетевых услуг. Эта архитектура значительно уменьшает полную сложность здания, поддержания и развертывания приложений. Платформа услуг OSGi обеспечивает функции для изменения состава динамично на устройстве множества сетей, не требуя перезапусков.

В единственной структуре приложения, скажем Eclipse IDE, это не имеет большого значения для перезапуска, когда Вы устанавливаете новый плагин. Используя реализацию OSGi полностью, необходимо быть в состоянии добавить плагины во времени выполнения, получить новую функциональность, но не иметь для перезапуска затмения вообще.

Снова, не грандиозное предприятие в течение каждого дня, использования небольшого приложения.

, Но, когда Вы начинаете смотреть на мультикомпьютер, платформы распределенного приложения, это - то, где он начинает становиться интересным. Когда у Вас должно быть 100%-е время работы для критических систем, возможность заменить компоненты в горячем режиме или добавить, что новая функциональность во времени выполнения полезна. Предоставленный, существуют возможности того, чтобы сделать это теперь по большей части, но OSGi пытается связать все в миленькую платформу с едиными интерфейсами.

Делает OSGi, решают типичные проблемы, я не уверен в этом. Я имею в виду, это может, но издержки не могут стоить того для более простых проблем. Но это - что-то для рассмотрения, когда Вы начинаете иметь дело с большим, сетевым, приложениями.

11
задан davidstites 5 December 2009 в 05:56
поделиться

1 ответ

У вас двоих есть проблемы, к сожалению, один из них замаскирован другим.

Обе проблемы проистекают из этой части представления:

<div class="association">
  <% fields_for :associations do |assoc_form| %>
    <%= assoc_form.collection_select(:association_id, Association.find(:all),
      :id, :name, :include_blank => true) %>

Проблема 1: Вы неправильно поняли, что делает accept_nested_fields_for.

accept_nested_fields_for используется для создания и изменения связанных объектов в форме. Его можно использовать для заполнения таблицы соединений, что вы и пытаетесь сделать. Однако использование accept_nested_fields_for для заполнения таблицы соединения невозможно с отношением HABTM. Хорошо использовать accept_nested_fields_for, если вы хотите создать новую ассоциацию, которая будет связана с новым поверенным. Или если у вас есть расширенная модель соединения, которая требует дополнительной информации для каждой записи.

Проблема 2: Вы не связываете поля в этой форме с формой поверенного. Что необходимо для использования accept_nested_fields_for.

Мы уже установили, что accept_nested_fields_for - это не то, что вам нужно для этого, но вы по-прежнему не связываете поле select association_id с формой. Вот почему был установлен параметр params [Association] [association_id], а не params [attorney] [Association] [association_id].

Проблема 3: Структура формы неверна для того, что похоже на то, что вы пытаетесь выполнить.

Слишком многое нужно исправить, чтобы я мог дать правильный анализ. Вам лучше проверить репозиторий сложных форм . Это рабочий пример accept_nested_attributes_for, он не касается каких-либо отношений HABTM, но должен научить вас всему, что вам нужно знать. Исправленный код ниже составляет 90% от того, что вам нужно. Приведенные выше примеры сложных форм научат вас тому, что вам нужно знать, чтобы заполнить пробелы, которые являются add_association_link и create_association_link.

Исправление включает следующие шаги:

  1. Создайте модель соединения, и изменить отношение на «имеет много через один», принимая вложенные атрибуты в модели соединения.
  2. Внесите незначительные изменения в контроллер с точки зрения построения вещей.
  3. Передайте объект построителя форм в партиал.
  4. Перепишите форму в партиале, чтобы она фокусировалась на вновь созданной модели соединения.

Вы можете сделать это с помощью следующих изменений.

class Attorney < ActiveRecord::Base
  has_many :attorney_associations
  has_many :associations, :through => :attorney_associations

  accepts_nested_attributes_for :attorney_associations, :reject_if => proc { |a| 
     a['association_id'].blank? }
  accepts_nested_attributes_for :associations, :reject_if => proc {|a|
     a['name'].blank?}
end

class AttorneyAssociations < ActiveRecord::Base
  belongs_to :attorney
  belongs_to :association
end

Контроллер поверенного:

def new
  @attorney = Attorney.new
  @attorney.associations.build
  @attorney.attorney_associations.build


  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @attorney }
  end
end

Новый вид поверенного:

<% form_for(@attorney, :html => {:multipart => true}) do |f| %>
  <%= f.error_messages %>
 <%= f.label :"First name" %> 
 <%= f.text_field :firstname %><br>

 <%= f.label :"Last Name" %> 
 <%= f.text_field :lastname %><br>

 <%= f.label :"Attorney Type" %> 
 <%= f.collection_select :member_type_id, MemberType.all, :id, :name %><br>

 <%= f.text_area :bio, :cols => 70, :rows => 20 %><br><br>

 <%= f.label :"Attorney Location" %> 
 <%= f.collection_select :office_location_id, OfficeLocation.all, :id, :location %><br>

 <div id="associations">
   <% f.fields_for :attorney_association do |aa_form| %>
     <%= render :partial => 'attorney_association', :locals => {:f => aa_form} %>
   <% end %>
   <%= add_association_link "Add Another Existing Association" %>
   <% f.fields_for :associations do |assoc_form| %>
     <%= render :partial => 'attorney', :locals => {:f => assoc_form} %>       
   <%= create_association_link, "Create a New Association for this Attorney" %>
 </div>



 <%= f.submit 'Create' %>
<% end %>

I ' m предполагая, что add_association_link является помощником javascript, который создает ссылку для клонирования пустого экземпляра того, что было партиалом членства. create_association_link - это заполнитель для аналогичного помощника, который добавит частичное для новой ассоциации.

Частичная ассоциация юриста:

  <div class="attorney_association">
    <%= f.collection_select(:association_id, Association.find(:all),
      :id, :name, :include_blank => true) %>
    <%= link_to_function "remove", "$(this).up('.attorney_association').remove()" %>
  </div>

Частичная ассоциация:

  <div class="association">
    <%= f.label_for :name %>
    <%= f.text_field :name %>
    <%= link_to_function "remove", "$(this).up('.attorney_association').remove()" %>
  </div>
27
ответ дан 3 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: