Rails 3.1:使用has_many:通过关联保存新对象时验证失败

时间:2012-01-03 14:57:13

标签: ruby-on-rails validation activerecord

# 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 :(得分:0)

您可以尝试验证联接表的存在,而不是验证文章是否包含多个类别,例如:

# article.rb
validates :article_categories, presence: true

答案 1 :(得分:-2)

在此处查看Rails指南中的正确格式:

has_many :patients, :through => :appointments

From here!我想你会以不正确的格式找到你的声明。