Проблема с acceptpts_nested_attributes_for при проверке внешнего ключа

Я использую Ruby on Rails v3.2.2. Я хотел бы решить вопрос, связанный с проверкой внешнего ключа при использованииaccepts_nested_attributes_for а такжеvalidates_associated RoR методы. То есть у меня есть следующие классы моделей:

class Article < ActiveRecord::Base
  has_many :category_associations, :foreign_key => 'category_id'

  accepts_nested_attributes_for :category_associations, :reject_if => lambda { |attributes| attributes[:category_id].blank? }
  validates_associated :category_associations
end

class CategoryAssociation < ActiveRecord::Base
  belongs_to :article, :foreign_key => 'article_id'
  belongs_to :category, :foreign_key => 'category_id'

  validates :article_id, :presence => true
  validates :category_id, :presence => true
end

... и у меня есть следующие действия контроллера:

class ArticlesController < ApplicationController
  def new
    @article = Article.new
    5.times { @article.category_associations.build }

    # ...
  end

 def create
   @article = Article.new(params[:article])

   if @article.save
     # ...
   else
     # ...
   end
 end
end

С помощью приведенного выше кода («вдохновленный»Вложенная модель, часть 1 Рельсы литые)мое намерение заключается в сохранении ассоциаций категорий при создании статьи (нота: объекты категории уже присутствуют в базе данных; в моем случае я хотел бы просто сохранить-создать ассоциацию категорий). Однако, когда я отправляю связанную форму из файла связанного представления, я получаю следующую ошибку (я регистрирую сообщения об ошибках):

{:"category_associations.article_id"=>["can't be blank"], :category_associations=>["is invalid"]}

Почему это происходит сvalidates_associated кажется запустить методarticle.category_association.valid? но только еслиarticle.category_association.article_id являетсяне nil? Как я могу решить проблему с проверкой присутствияarticle_id внешний ключ?

Однако, если я закомментируюvalidates :article_id, :presence => true вCategoryAssociation модель класса, работает как положено, ноэто кажетсяне правильный подход, чтобы сделатьне проверить внешние ключи.

Если я закомментируюvalidates_associated :category_associations вArticle Модель класса, я все еще получаю ошибку:

{:"category_associations.article_id"=>["can't be blank"]}

Ответы на вопрос(3)

Ваш ответ на вопрос