我有两个与User
关联相关的模型Item
和has_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
有什么想法吗?
答案 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。