有很多创造! validation存在
我有两个模型User
和Item
,它们与has_many through
关联相关。 我想创建没有项目的用户,但项目创建应validation至少一个用户的存在。 我用以下方式创建项目:
@user.items.create!(name: "Ball")
在创建项目之前,如何创建用户在场的工作validation?
我尝试了以下方法:
-
validate :users, presence: true
Item
模型中为validate :users, presence: true
- 在
Item
模型中validate :item_users, presence: true
- 在
ItemUser
连接模型中validate :user, :item, presence: true
-
error.add(:base, 'select at least one user') if self.users.count < 1
,则在Item
模型中validate :should_have_at_least_one_user
error.add(:base, 'select at least one user') if self.users.count < 1
,其中私有函数执行error.add(:base, 'select at least one user') if self.users.count < 1
这些方法都没有奏效。 我认为问题是某种竞争条件,因为当我按照以下方式创建项目时,一些validation确实有效。
@item.new(name: "Ball") @item.users << @user @item.save
有任何想法吗?
使用回调
在您的项目控制器中:
before_save :user_for_item_exists? private def user_for_item_exists? return nil if @item.users == nil return @item end
第二次回归有点冗长,你可以省略它。 然后你有@item保存或零。 您可以在模型中确保不保存nil。