Как сохранить пару идентификаторов в отношениях «многие ко многим» в рельсах 3.1.0? - PullRequest
0 голосов
/ 11 января 2012

Этот вопрос довольно сложный.Приложение имеет модель rfq:

class Rfq < ActiveRecord::Base
  has_and_blongs_to_many :standards
end

Таблица rfqs_standards была создана только с двумя столбцами: один для rfq_id и другой для standard_id.

Внедрен стандартный выбор в новой форме rfq.Вот как выглядит источник html-страницы:

  <div class="input select optional">
    <label class="select optional" for="rfq_standard_ids"> Standard:</label>
    <select class="select optional" id="rfq_standard_ids" multiple="multiple" name="rfq[standard_ids][]" size="5">
      <option value="1">FCC15</option>
      <option value="2">Roth EU</option>
    </select>
  </div>

Как видно из источника, rfq [standard_ids] будет содержать входное значение для стандарта.

Мой вопросКак сохранить пару rfq_id и standard_id в таблицу rfqs_standards вместе с сохранением rfq?

В модели rfq определен установщик для сохранения идентификаторов в rfqs_standards.Однако установщик сделал только для того, чтобы сохранить один и тот же rfq 3 раза (на новой странице rfq есть 3 стандартных выбора) и ничего не сделал для сохранения пары id.Сеттер:

  def standard_ids=(attributes)
    attributes.each do |attr|
      standards.build(attr)
    end
  end

Есть мысли?спасибо.

1 Ответ

0 голосов
/ 11 января 2012

Вот решение. При создании контроллера rfq добавьте:

  #save into join table rfqs_standards
  params[:rfq][:standard_ids].each do |sid|
    @rfq.standards << Standard.find(sid.to_i)
  end

Этот цикл добавляет каждый выбранный стандарт в @ rfq.standards. Когда @ rfq.save, идентификатор пары сохраняется в таблице соединений rfqs_standards.

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