PostgreSQL 不支持您描述的方式的参数化视图。它可以具有调用函数的视图,该函数可以访问当前会话状态,您可以在从视图中选择数据之前设置该状态。但是,我建议您定义一个带有参数的方法
class UserRepo
def user_details(prefix)
root.project { [id, user_name] }.where { user_name.ilike("#{ prefix }%") }.to_a
end
end
你得到的基本上是一样的。如果您想user_details
用作基础关系,您可以在 repo 上定义一个私有方法并从其他公共方法调用它
class UserRepo
def user_details_filtered(user_name, min_user_id = 0)
user_details(prefix).where { id > min_user_id }.to_a
end
def user_details_created_after(user_name, after)
user_details(prefix).where { created_at > after }.to_a
end
private
# Don't call this method from the app code, this way
# you don't leak SQL-specific code into your domain
def user_details(prefix)
root.project { [id, user_name] }.where { user_name.ilike("#{ prefix }%") }
end
end