【问题标题】:has-many-through create! validate presencehas-many-through 创造!验证存在
【发布时间】:2013-11-13 10:16:43
【问题描述】:

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

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

如何在创建项目之前创建用户存在的有效验证?

我尝试了以下方法:

  • Item 模型中的 validate :users, presence: true
  • validate :item_users, presence: trueItem 模型中
  • validate :user, :item, presence: trueItemUser 连接模型中
  • Item 模型中的 validate :should_have_at_least_one_user 具有执行 error.add(:base, 'select at least one user') if self.users.count < 1 的私​​有函数

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

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    使用回调

    在您的项目控制器中:

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

    第二次返回有点冗长,你可以省略它。然后,您要么拥有要保存的 @item,要么拥有 nil。您可以确保在您的模型中没有保存 nil。

    【讨论】:

    • 它不工作。我可以使用Item.create(name:"Car") 创建一个项目。
    猜你喜欢
    • 1970-01-01
    • 2011-02-08
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多