Ruby on rails Rails是隐藏未发布内容的一种方式
我以前在Node或Django中做过无数次的事情,现在有点被卡住了 我正在构建一个只支持API的Rails应用程序 假设我有一个包含博客帖子的帖子模型。该模型有一个published属性,该属性确定某个帖子是否已向较大的公众开放 显然,如果标志为true,控制器中的目标是返回POST的JSON 对于集合,我在我的Post模型中创建了一个简单的作用域,如下所示:Ruby on rails Rails是隐藏未发布内容的一种方式,ruby-on-rails,activemodel,Ruby On Rails,Activemodel,我以前在Node或Django中做过无数次的事情,现在有点被卡住了 我正在构建一个只支持API的Rails应用程序 假设我有一个包含博客帖子的帖子模型。该模型有一个published属性,该属性确定某个帖子是否已向较大的公众开放 显然,如果标志为true,控制器中的目标是返回POST的JSON 对于集合,我在我的Post模型中创建了一个简单的作用域,如下所示: scope :published, -> { where(published: true) } 然而,对于单个请求,我不确定
scope :published, -> { where(published: true) }
然而,对于单个请求,我不确定什么是正确的,或者更确切地说:Rails处理这种请求的方式。我可以强迫它,但我觉得像这样的事情在配置技巧上有一个整洁的约定
本质上,我对最干净的解决方案很好奇:如果post的published属性为true,则返回post对象,如果为false,则返回404
我应该看看示波器吗?序列化程序?宝藏藏在哪里
谢谢你的贡献 没有金弹,但使用示波器是可以的
在控制器中,您可能有类似的功能:
post=post.findparams[:post\u id]
现在,使用已发布的作用域将按预期工作,其类型/结果为SQL和:
post=post.published.find参数[:post_id]
它不会首先从数据库中查询所有已发布的帖子,然后再查看它们。这里特定的ORM代码对象数据库映射的美妙之处在于,您最终只需对数据库进行一次查询,如日志文件中所示
返回404或任何仍然取决于您/您的控制器业务-as find的东西将引发异常,如果没有找到任何东西,它将默认为您希望的行为。没有金弹,但使用scopes是可以的
在控制器中,您可能有类似的功能:
post=post.findparams[:post\u id]
现在,使用已发布的作用域将按预期工作,其类型/结果为SQL和:
post=post.published.find参数[:post_id]
它不会首先从数据库中查询所有已发布的帖子,然后再查看它们。这里特定的ORM代码对象数据库映射的美妙之处在于,您最终只需对数据库进行一次查询,如日志文件中所示
返回404或任何仍然由您/您的业务控制器决定的东西-as find将引发异常,如果未找到任何内容,它将默认为您希望的行为