有很多创造!验证存在

时间:2013-11-13 10:16:44

标签: ruby-on-rails ruby validation has-many-through

我有两个与User关联相关的模型Itemhas_many through。我想创建没有项目的用户,但项目创建应该验证至少一个用户的存在。我按以下方式创建项目:

@user.items.create!(name: "Ball")

在创建项目之前,我该怎么做才能创建用户在场的工作验证?

我尝试了以下方法:

  • validate :users, presence: true模型中的Item
  • validate :item_users, presence: true模型中的Item
  • validate :user, :item, presence: true加入模式中的ItemUser
  • validate :should_have_at_least_one_user模型中的Item,其中包含error.add(:base, 'select at least one user') if self.users.count < 1
  • 的私有函数

这些方法都没有奏效。我认为问题是某种竞争条件,因为当我按照以下方式创建项目时,一些验证确实有效。

@item.new(name: "Ball")
@item.users << @user
@item.save

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用回调

在你的物品管理员中:

before_save :user_for_item_exists?


private
def user_for_item_exists?
  return nil if @item.users == nil
  return @item      
end

第二次回归有点冗长,你可以省略它。然后你有@item保存或零。您可以在模型中确保不保存nil。