Rails甚至可以保存验证错误

时间:2017-08-07 21:42:01

标签: ruby-on-rails activerecord ruby-on-rails-5 has-and-belongs-to-many

我使用Has和属于许多人的两个模型之间存在多对多关系。关系介于PostSite之间。此关系由使用site_ids param。

的表单上的复选框定义

问题是当我更新具有验证错误的Post表单时,即使验证错误也会保存该关系。

我也试过为HABTM设置autosave false。

我的Post型号:

class Post
  has_and_belongs_to_many :sites, join_table: "posts_sites"

  validates_presence_of :title
end

当我发送新关系ID但没有标题时,Post不会保存,但会创建关系并且不会回滚。

> p = Post.last
> p.sites.map(&:id)
=> [1]

> p.update_attributes(site_ids: [1,2], title: '')

(0.2ms)  BEGIN

Site Load (0.4ms)  SELECT `sites`.* FROM `sites` WHERE `sites`.`id` IN (1, 2)

SQL (1.3ms)  INSERT INTO `posts_sites` (`site_id`, `post_id`, `created_at`, `updated_at`) VALUES (2, 3, '2017-08-07 21:28:00', '2017-08-07 21:28:00')
(5.7ms)  COMMIT
(0.2ms)  BEGIN

(0.5ms)  ROLLBACK
=> false

> p.errors.messages
=> {:title=>["can not be blank"]}

> Post.last.sites.map(&:id)
=> [1, 2]

当我收到验证错误时,如何回滚关系?

0 个答案:

没有答案