我使用Has和属于许多人的两个模型之间存在多对多关系。关系介于Post
和Site
之间。此关系由使用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]
当我收到验证错误时,如何回滚关系?