【问题标题】:Scope returns every item in the association if it cannot find an item that matches the scope's criteria如果找不到与范围条件匹配的项目,则范围返回关联中的每个项目
【发布时间】:2014-03-05 19:29:04
【问题描述】:

我有一个简单的范围:

scope :named, ->(passed_name) { find_by(name: passed_name) }

如果作用域找到具有请求名称的条目,则按预期返回该条目:

@post1 = @user.posts.create(name: "My Post")
@post2 = @user.posts.create(name: "Some Post")
@post3 = @user.posts.create(name: "Some Other Post")
@user.posts.named("My Post") # => returns @post1

但是,如果没有找到具有请求名称的条目,则返回关联中的每个项目:

@post2 = @user.posts.create(name: "Some Post")
@post3 = @user.posts.create(name: "Some Other Post")
@user.posts.named("My Post") # => returns association with @post2 and @post3, not the expected nil

这是预期的行为吗?无论哪种方式,我可以做些什么来获得 nil 而不是完全关联?

【问题讨论】:

    标签: ruby-on-rails activerecord scope


    【解决方案1】:

    Looks like 这就是 Rails 开发人员想要的东西。

    由于范围是不可能的,我不得不采取不同的方法。在 User 模型中,我创建了一个方法:

    def post_named(name)
      posts.find_by(name: name)
    end
    

    没有那么优雅,但至少可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2021-09-05
      • 2016-10-18
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多