Rails 3.1: валидация завершается неудачно при сохранении новых объектов с помощью has_many: through - PullRequest
1 голос
/ 03 января 2012
# article.rb
class Article < ActiveRecord::Base
  has_many :article_categories, dependent: :destroy
  has_many :categories, through: :article_categories

  validates :title, :description, :body, presence: true
  validates :categories, presence: true
  validates_associated :categories
end

#articles_controller.rb
def create
    @article = Article.new(params[:article])
    respond_to do |format|
      if @article.save
        format.html { redirect_to @article, notice: 'Article was successfully created.' }
        format.json { render json: @article, status: :created, location: @article }
      else
        format.html { render action: "new" }
        format.json { render json: @article.errors, status: :unprocessable_entity }
      end
    end
end

У меня есть статья, связанная с одной или несколькими категориями.Я хочу убедиться, что статья присваивается категории каждый раз, когда запись сохраняется.При обновлении это работает нормально, но при создании я получаю unprocessable entity, потому что не может быть создана ассоциация ArticleCategory, так как для нее требуется id статьи.Но id не устанавливается до тех пор, пока Article не будет сохранено.Но я не могу сохранить недействительные модели.Вы поняли идею.Как я могу create объекты, не жертвуя своими проверками?

Редактировать: Я исправил строку проверки.Это убрано, чтобы удалить некоторые другие вещи, поэтому я случайно удалил presence: true

Ответы [ 2 ]

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

Вместо проверки того, что статья имеет много категорий, вы можете попробовать проверить наличие таблицы объединения, например:

# article.rb
validates :article_categories, presence: true
0 голосов
/ 03 января 2012

Посмотрите на Руководства по Rails для правильного формата здесь:

has_many :patients, :through => :appointments

Отсюда ! Я думаю, что вы найдете свои объявления в неподходящем формате.

...