【发布时间】:2013-09-18 01:28:54
【问题描述】:
我有以下型号:
class Price < ActiveRecord::Base
belongs_to :article, inverse_of: :prices
validates :article_id, presence: true
end
class Article < ActiveRecord::Base
has_many :prices, dependent: :destroy, inverse_of: :article
end
创建它们时的代码在保存时引发验证错误(价格无效):
article = Article.new
article.prices.build( { amount: 55.0 } )
article.save! #=> Validation failed: Prices is invalid
所以 Rails 不够聪明,无法在子对象(价格)之前保存父对象(文章),因此可以在保存之前将 article_id 分配给价格。
在使用构建函数时如何对外键进行验证?
这似乎是一个非常标准的场景,应该可行?
(我知道您可以使用数据库级别的约束,但我在这里询问的是应用程序级别的验证)
【问题讨论】:
-
在建立价格之前不能保存文章吗?
-
是的,这是一种解决方法。但这似乎是 Rails 中的一个问题,因为这个工作流程应该可以工作。
-
@depa 不,完全不同
-
想解释一下为什么?您想要验证
has_many关联的存在,这正是我链接的问题所问的。
标签: ruby-on-rails ruby activerecord ruby-on-rails-4