Rails 隐藏未发布内容的方法
Rails way of hiding things that are unpublished
我对以前在 Node 或 Django 中做过无数次的事情有点困惑。
我正在构建一个仅 API 的 Rails 应用程序。
假设我有一个包含博客 post 的 Post
模型。该模型有一个 published
属性,它确定某个 post 是否已经可用于较大的 public。
显然,如果标志为真,控制器的目标是 return post(s) 的 JSON。
对于集合,我在 Post 模型中创建了一个简单的范围,如下所示:
scope :published, -> { where(published: true) }
但是,对于单个请求,我不确定什么是正确的,或者更确切地说:Rails 处理此问题的方式。我可以“强迫它”,但我觉得像这样的事情有一个巧妙的“约定优于配置”技巧。
本质上,我很好奇最干净的解决方案:如果 post 的已发布属性为真,return post 对象, 如果为假, return a 404
我应该看看示波器吗?序列化程序?宝藏藏在哪里?
感谢贡献!
没有金弹,但使用范围很好。
在你的控制器中你可能有类似的东西:
post = Post.find(params[:post_id])
现在,使用您的 published
范围将按预期工作(它在 SQL AND
中的类型 of/results):
post = Post.published.find params[:post_id]
它不会首先从数据库中查询所有已发布的帖子,然后再浏览它们。此处特定 ORM(执行代码对象 <-> 数据库映射)的美妙之处在于,您最终将对数据库进行一次查询(如日志文件中所示)。
返回 404 或其他任何东西仍然取决于 you/your 控制器业务 - 因为 find
如果没有发现任何内容将引发异常,它默认为您希望的行为。
我对以前在 Node 或 Django 中做过无数次的事情有点困惑。
我正在构建一个仅 API 的 Rails 应用程序。
假设我有一个包含博客 post 的 Post
模型。该模型有一个 published
属性,它确定某个 post 是否已经可用于较大的 public。
显然,如果标志为真,控制器的目标是 return post(s) 的 JSON。
对于集合,我在 Post 模型中创建了一个简单的范围,如下所示:
scope :published, -> { where(published: true) }
但是,对于单个请求,我不确定什么是正确的,或者更确切地说:Rails 处理此问题的方式。我可以“强迫它”,但我觉得像这样的事情有一个巧妙的“约定优于配置”技巧。
本质上,我很好奇最干净的解决方案:如果 post 的已发布属性为真,return post 对象, 如果为假, return a 404
我应该看看示波器吗?序列化程序?宝藏藏在哪里?
感谢贡献!
没有金弹,但使用范围很好。
在你的控制器中你可能有类似的东西:
post = Post.find(params[:post_id])
现在,使用您的 published
范围将按预期工作(它在 SQL AND
中的类型 of/results):
post = Post.published.find params[:post_id]
它不会首先从数据库中查询所有已发布的帖子,然后再浏览它们。此处特定 ORM(执行代码对象 <-> 数据库映射)的美妙之处在于,您最终将对数据库进行一次查询(如日志文件中所示)。
返回 404 或其他任何东西仍然取决于 you/your 控制器业务 - 因为 find
如果没有发现任何内容将引发异常,它默认为您希望的行为。