Rails validates_presence_of并验证has_one关联模型中的状态

时间:2013-08-28 07:38:23

标签: ruby-on-rails validation associations ruby-on-rails-4 models

我无法将对象保存到相应的表格中。

模型客户。我想确保它有一个关联的有效帐户:

has_one :account, dependent: :destroy
validates_presence_of :account
validates_associated :account

模型账户属于客户,因此我想强制执行customer_id:

belongs_to :customer
validates :customer_id, presence: true

现在,我的问题是:我应该保存这些对象的顺序是什么?这些验证是否有些不相容?

因为,如果我首先尝试保存客户,那么它将无法实现,我会得到

myCustomer.save.errors.messages
{:account=>["can't be blank"]}

显然,因为我说过

validates_presence_of :account

在模型中。

但如果我先尝试保存帐户,请等待!我也无法保存!我有

  

验证:customer_id,presence:true

在我的帐户模型中,我还没有保存任何客户!

所以我也尝试初始化帐户:

acc = Account.new(acc_attr: foo, acc_attr2: bar)

然后尝试将其设置为Customer

Customer.account = acc

但是再一次,客户不会因为acc无效而无法保存,(因为它没有customer_id,我有一个validates_associated:客户模型中的帐户)

那么,我是否必须放弃任一模型中的一次验证?有解决方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将其添加到模型中:

attr_accessible: :customer_id

并添加到GemFile:

gem 'devise', '3.0.0.rc' 
gem 'protected_attributes'
  • 在终端中运行:$ bundle install
  • 重置服务器

您应该检查您的控制器:

params.require(:account).permit(:customer_id)