Rails 3 设计:"hiding" 条目 "attribute" 为真,但仅在 api 级别
Rails 3 design: "hiding" an entry with "attribute" true, but only on the api level
在 rails 3 应用程序中,我有一个带有名为 "archived" 的布尔属性的模型。此属性可在 cms 中访问,我可以在其中进入并编辑单个对象,还有一个复选框,我可以在其中检查对象是否已存档。但是,如果此对象已存档,我不希望可以在 api 级别访问此对象。这包括对象本身及其关联的对象。同时我希望可以在 cms 中访问该对象,编辑其他详细信息并将存档值设置回 false,以便我可以在 api 中再次访问该对象并将其行为改回默认。
我非常感谢有关如何从 design/high 级别的角度处理此问题的建议。感谢您的帮助。
当您说 "api" 时,您的意思是:
- Public RESTful API
- 在您自己的代码中访问这些模型。喜欢您模型上的查找器方法吗?
对于第一种情况,只获取处于所需状态的对象 (Model.where(archived: false)
)。
在第二种情况下,考虑到 Ruby 是非常 "open" 的语言,不可能限制对任何对象 属性 或方法的访问。但是,要构建供其他团队成员使用的 public API,您可以添加正确过滤模型的方法(查看 scope
)。
作为 Model.where(archived: false)
的第二个选择
如果您使用状态枚举器而不是布尔值,则可以使用 Model.archived 或 Model.published 来限制列表...您所需要的只是模型的整数字段db table,以及模型中的类似内容:
enum status: { dev:0, published: 1, archived: 2}
然后在您的 API 中定义要将其限制为的状态段,如上所示。 RoR 中的枚举器系统一开始有点棘手,但一旦掌握就会非常强大。
在 rails 3 应用程序中,我有一个带有名为 "archived" 的布尔属性的模型。此属性可在 cms 中访问,我可以在其中进入并编辑单个对象,还有一个复选框,我可以在其中检查对象是否已存档。但是,如果此对象已存档,我不希望可以在 api 级别访问此对象。这包括对象本身及其关联的对象。同时我希望可以在 cms 中访问该对象,编辑其他详细信息并将存档值设置回 false,以便我可以在 api 中再次访问该对象并将其行为改回默认。
我非常感谢有关如何从 design/high 级别的角度处理此问题的建议。感谢您的帮助。
当您说 "api" 时,您的意思是:
- Public RESTful API
- 在您自己的代码中访问这些模型。喜欢您模型上的查找器方法吗?
对于第一种情况,只获取处于所需状态的对象 (Model.where(archived: false)
)。
在第二种情况下,考虑到 Ruby 是非常 "open" 的语言,不可能限制对任何对象 属性 或方法的访问。但是,要构建供其他团队成员使用的 public API,您可以添加正确过滤模型的方法(查看 scope
)。
作为 Model.where(archived: false)
的第二个选择如果您使用状态枚举器而不是布尔值,则可以使用 Model.archived 或 Model.published 来限制列表...您所需要的只是模型的整数字段db table,以及模型中的类似内容:
enum status: { dev:0, published: 1, archived: 2}
然后在您的 API 中定义要将其限制为的状态段,如上所示。 RoR 中的枚举器系统一开始有点棘手,但一旦掌握就会非常强大。