Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rails最佳实践-控制器还是模型?

Rails最佳实践-控制器还是模型?
EN

Stack Overflow用户
提问于 2013-12-03 19:27:52
回答 2查看 387关注 0票数 1

我想用这段代码检索文件中的用户信用卡列表,并将Stripe显示在他的配置文件(/user/:id)上

@stripe_cards = Stripe::Customer.retreive(self.stripe_customer_id).cards.all

问题是,我不太清楚(就Rails最佳实践而言)它适合哪里。我的第一个想法是把它放在用户控制器的显示方法中,因为它不是真正的业务逻辑,也不适合于模型。我也看过助手方法,但(据我理解),它们似乎在玩HTML时被严格使用。

你们中的任何一个Rails专家能参与进来吗?

谢谢!弗朗西斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-03 20:38:49

问得好。每当您在rails中看到实例变量(从@开始)时,它通常是一个视图/控制器代码。

代码语言:javascript
运行
AI代码解释
复制
@stripe_cards = Stripe::Customer.retreive(self.stripe_customer_id).cards.all

然而,看看它的尾部

代码语言:javascript
运行
AI代码解释
复制
Stripe::Customer.retreive(self.stripe_customer_id).cards.all

这可能更适合于模型,在这个模型中,您可以重用同一行的,但是具有添加错误处理和可预测行为的安全性。例如

代码语言:javascript
运行
AI代码解释
复制
# user.rb

def stripe_customer_cards
  Stripe::Customer.retreive(self.stripe_customer_id).cards.all
  rescue Stripe::InvalidRequestError
    false # You could use this to render some information in your views, without breaking your app.
end

还请注意self的使用。这通常意味着使用Rails模型,因为在控制器中调用self实际上是指控制器,使其几乎毫无价值,除非您真正知道自己在做什么。

编辑

若要呈现错误消息,只需使用alert选项编写一个重定向或呈现调用即可。

代码语言:javascript
运行
AI代码解释
复制
if @stripe_cards = current_user.stripe_customer_cards
  # Your being paid, sweet!
else
  # Render alert info :(
  render 'my_view', alert: 'This is an alert'
  redirect_to other_path, alert: 'Another alert'
end

我也想指出一点,你不应该仅仅因为你能处理错误而去处理错误。不要处理您不期望的错误。如果您处理错误,则不希望它发生。

  • 迷惑用户
  • 使代码中的bug更难修复
  • 夸大错误识别前的时间
票数 4
EN

Stack Overflow用户

发布于 2013-12-03 21:52:32

我建议在User模型中添加一个虚拟属性:

代码语言:javascript
运行
AI代码解释
复制
# app/models/user.rb
def cards
    Stripe::Customer.retrieve(stripe_customer_id).cards.all # note the spelling of `retrieve`
end

然后,您将能够以下列方式访问所有用户卡:

代码语言:javascript
运行
AI代码解释
复制
user = User.first
#=> #<User id:1>

user.cards
#=> [Array of all cards]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20366236

复制
相关文章
Django模型最佳实践
正确的模型命名和关系字段命名。 设置适当的related_name属性。 用OneToOneField代替ForeignKeyField(unique=True)。 通过“迁移操作”(migrate)来添加模型。 用NoSQL来应对需要降低范式级别的场景。 如果布尔类型可以为空要使用NullBooleanField。 在模型中放置业务逻辑。 用<ModelName>.DoesNotExists取代ObjectDoesNotExists。 在数据库中不要出现无效数据。 不要对QuerySet调用len()函数
用户8442333
2021/05/20
2.3K0
PyTorch 最佳实践:模型保存和加载
PyTorch模型保存和加载有两种方法,官方最佳实践指南推荐其中一种,但似乎效果没啥区别。最近做模型量化,遇到一个意外的错误,才理解了最佳实践背后的原理,以及不遵循它可能会遇到什么问题。
McGL
2020/09/21
1.9K0
NasNet实践:图像识别领域最佳模型
  谷歌最近推出的NasNet,是当前图像识别领域的最佳模型,近日对此模型进行复现了下,也大致了解了其原理。这个模型并非是人为设计出来的,而是通过谷歌很早之前推出的AutoML自动训练出来的。该项目目的是实现“自动化的机器学习”,即训练机器学习的软件来打造机器学习的软件,自行开发新系统的代码层,它也是一种神经架构搜索技术(Neural Architecture Search technology)。然而尽管AutoML 能够设计出性能可与人类专家设计的神经网络相媲美的小型神经网络,但仍被限制在 CIFAR-10 等小型学术数据集方面。
sparkexpert
2022/05/07
1.6K0
NasNet实践:图像识别领域最佳模型
【GIT最佳实践】--GIT最佳实践
提交消息规范是在使用Git进行版本控制时的一项最佳实践,它有助于组织和标准化提交消息,使团队更容易理解和管理项目的变更历史。以下是关于Git提交消息规范的最佳实践:
喵叔
2023/10/09
4000
MongoDB大数据量模型设计最佳实践
数据质量项目,实时消费kafka数据,并经过流式计算后,需要展示并处理有问题的数据。
MongoDB中文社区
2021/08/06
1.1K0
MongoDB大数据量模型设计最佳实践
「PowerBI」使用TabularEditor进行PowerBIDeskTop模型开发最佳实践
虽然大体上都是同一个引擎,但最终的定位的原因PowerBIDeskTop数据模型只是单机版的运行,其运行的方式未能如Sqlserver的完整,所以使用TabularEditor读取到的元数据也有所不同。
Excel催化剂
2021/08/19
8630
「PowerBI」使用TabularEditor进行PowerBIDeskTop模型开发最佳实践
腾讯云NLP大模型预训练最佳实践
根据当前人工智能的趋势,越大的自然语言模型可以提供越好的准确性,目前GPT-3的模型参数达到175B。但是由于成本、时间和代码集成的障碍,较大的模型难以训练。
TI MAKER
2021/08/30
2.7K0
ActFramework - 控制器单例还是多例
控制器是 MVC 框架的核心组件,应用程序控制器的方法处理 HTTP 请求。这里首当其冲需要回答的一个问题就是控制器的实例应该是单例 (Singleton)还是就每个请求生成新的实例。 不同的框架对此有不同的处理方式,SpringMVC 的控制器采用单例;Struts 的 Action 则是多实例;PlayFramework v1.x 的方式比较极端,控制器方法必须是静态的,因此不需要生成实例。 ActFramework 生成控制器实例的方式与众不同,没有统一的单例或者多例的限制,而是根据应用程序控制器代码
老码农
2018/06/27
2440
lerna最佳实践
在介绍我们今天的主角 lerna 之前,首先了解下什么是 multirepo ?什么是 monorepo ?
astonishqft
2022/05/10
1.9K0
lerna最佳实践
MacBook 最佳实践
MacBook 兼具命令行的高效与图形界面的酷炫,实在是程序员必备利器。本文主要介绍我在两年的使用过程中总结出的一些最佳实践,供大家参考、借鉴。
飞驰的西瓜
2022/07/26
1.9K0
MacBook 最佳实践
Iptables 最佳实践 !
考虑一种网络拓扑应用情景,一个内部局域网中有多台服务器提供不同的服务,如web服务、FTP服务、ssh、telnet等,通过服务器(或网关、防火墙)连接外部网络,如果外部网络上的主机需要访问这些服务器,则需要在网关上实现转发。
民工哥
2020/11/09
1.4K0
Iptables 最佳实践 !
jQuery最佳实践
上周,我整理了《jQuery设计思想》。 那篇文章是一篇入门教程,从设计思想的角度,讲解"怎么使用jQuery"。今天的文章则是更进一步,讲解"如何用好jQuery"。 我主要参考了Addy Osmani的PPT《提高jQuery性能的诀窍》(jQuery Proven Performance Tips And Tricks)。他是jQuery开发团队的成员,具有一定的权威性,提出的结论都有测试数据支持,非常有价值。 =============================================
ruanyf
2018/04/12
1.7K0
jQuery最佳实践
Gradle最佳实践
经过以上配置,基本覆盖了Gradle开发过程中的大部分问题,如果在使用Gradle过程中还有什么问题,欢迎留言讨论。
肉眼品世界
2021/01/25
1.6K0
Wire 最佳实践
以下是我们推荐在使用 Wire 时应遵循的最佳实践。这个列表会随着时间的推移而增长。
孟斯特
2023/10/16
2680
Wire 最佳实践
Docker 最佳实践
1、每个容器只运行一个进程 2、配置和数据文件应该单独存储与备份。 3、使用.dockerignore 文件。在镜像构建过程中,Docker 会将Dockerfile 所在文件夹下的内容(即build context)复制到构建环境中。使用.dockerignore 文件可以将指定文件或者 文件夹在镜像构建时从文件复制列表中排除。如果你不使用.dockerignore 文件,请确 保在只有所需最小集合的文件夹下构建镜像。
用户5760343
2019/10/30
6690
SRE最佳实践
站点可靠性工程(SRE)的概念起源于谷歌。这个想法与DevOps的原则密切相关。它是It运营的一种方法。SRE团队使用软件来管理系统、解决问题和自动化操作任务。
用户5166556
2023/03/18
1.2K0
SRE最佳实践
Kafka最佳实践
作者:Sriharsha Chintalapani, Jay Kumar SenSharma 译者:java达人 来源:https://community.hortonworks.com/articles/80813/kafka-best-practices-1.html
java达人
2018/07/31
1.5K0
Kafka最佳实践
Dubbo 最佳实践
服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
JavaEdge
2021/02/22
4880
Docker 最佳实践
【编者的话】本文是Docker使用过程中的一些最佳实践。虽然很多都是老话重谈,但是很多人在使用过程中还是没有遵守,比如每个进程只使用一个容器这个最佳实践,有很多人都来问,如果不这样行不行,当然行,但是如果你想长久的用Docker,那还是请遵守最佳实践吧。
星哥玩云
2022/07/04
3540
Docker 最佳实践
SQLmode最佳实践
MySQL服务可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值。我们可以设置全局SQL模式以匹配应用程序要求,不同的sql_mode影响服务端支持的SQL语法以及数据校验规则。
MySQL技术
2019/09/08
1.4K0

相似问题

Rails最佳实践-参数还是多态模型?

10

Rails模型控制器最佳实践

20

Rails最佳实践控制器或模型

13

Rails模型最佳实践

12

嵌套模型最佳实践- rails

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文