Ruby on rails 如果无法找到与范围匹配的项,则范围返回关联中的每个项';s标准

Ruby on rails 如果无法找到与范围匹配的项,则范围返回关联中的每个项';s标准,ruby-on-rails,activerecord,scope,Ruby On Rails,Activerecord,Scope,我有一个简单的范围: 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")

我有一个简单的范围:

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而不是完整的关联吗?

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

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

def post_named(name)
  posts.find_by(name: name)
end
虽然没有那么优雅,但至少能起作用