有很多创造! validation存在

我有两个模型UserItem ,它们与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。