热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有更好的ruby方法吗-Isthereamorerubywayofdoingthis

Oksoihavethishelper我有这个助手defcurrent_company_title(Company.find_by_id(params[company_id]

Ok so i have this helper

我有这个助手

def current_company_title
 (Company.find_by_id(params["company_id"]).name rescue nil) || (@companies.first.name rescue nil) current_user.company.name
end

Basically what I am achieving with this is the following ...

基本上,我所取得的成果是……

If the param["company_id"] exists then try to get the company and if not then if @companies exists grab the first company name and if not then get the current users company name

如果param["company_id"]存在,则尝试获取公司,如果没有,则获取第一个公司名称,如果没有,则获取当前用户的公司名称

This works but the rescues seem like a hack...any idea on another way to achieve this

这是可行的,但救援看起来像黑客。有没有别的办法

6 个解决方案

#1


3  

Indeed rescue is kind of a hack, id' probably split it up into two methods and then use try to fetch the name if available: http://api.rubyonrails.org/classes/Object.html#method-i-try

实际上,save是一种黑客,id'可能将它分为两种方法,然后使用try来获取名称(如果有的话):http://api.rubyonrails.org/classes/Object.html method-i-try

def current_company
  @current_company ||= Company.find_by_id(params[:company_id]) || @companies.try(:first) || current_user.try(:company)
end

def current_company_name
  current_company.try(:name)
end

#2


2  

Company.find_by_id(params["company_id"]).name`

find and its derivates are meant to be used when you're sure-ish you'll have a positive result, and only in some cases (row was deleted, etc) errors. That's why it raises an exception. In your case, you're assuming it's gonna fail, so a regular where, which would return nil if no rows was found, would do better, and remove the first rescue

find和它的派生类应该在确定结果时使用,并且只有在某些情况下(删除行等)错误时才使用。这就是它引发一个例外的原因。在你的例子中,你假设它会失败,所以一个正则的where,如果没有找到行,它会返回nil,这样做会更好,并删除第一次救援

@companies.first.name rescue nil

could be replaced by

可以取代

@companies.first.try(:name)

I'll let you check the api for more on the topic of try. It's not regular ruby, it's a Rails addition.

我将让您检查api以获得更多关于try的主题。它不是普通的ruby,而是Rails的添加。

#3


2  

Less "magic", simple code, simple to read:

少了“魔法”,代码简单,易读:

def current_company_title
 company = Company.where(id: params["company_id"]).presence
 company ||= @companies.try(:first)
 company ||= current_user.company
 company.name
end

Ps. Not a big fan of Rails' try method, but it solves the problem.

对Rails的尝试方法并不热衷,但它解决了问题。

#4


1  

def current_company_title
    if params["company_id"]
        return Company.find_by_id(params["company_id"]).name
    elsif @companies
        return @companies.first.name
    else
        return current_user.company.name
    end
end

#5


1  

The rescues are a hack, and will obscure other errors if they occur.

救援是一种手段,一旦发生其他错误,就会被掩盖。

Try this:

试试这个:

(Company.find_by_id(params["company_id"].name if Company.exists?(params["company_id"]) ||
(@companies.first.name if @companies && @companies.first) || 
current_user.company.name

then you can extract each of the bracketed conditions to their own methods to make it more readable, and easier to tweak the conditions:

然后,您可以将每个括号括起来的条件提取到它们自己的方法中,使其更具可读性,并且更容易调整条件:

company_name_from_id(params["company_id"]) || name_from_first_in_collection(@companies) || current_user_company_name

def company_name_from_id(company_id)
  company=Company.find_by_id(company_id)
  company.name if company
end

def name_from_first_in_collection(companies)
  companies.first.name if companies && companies.first
end

def current_user_company_name
  current_user.company.name if current_user.company
end

#6


0  

[Company.find_by_id(params["company_id"]),
  @companies.to_a.first,
  current_user.company
].compact.first.name

推荐阅读
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • SQL Server开发技巧:修改表结构后的视图批量更新方法与实践 ... [详细]
  • 本文探讨了如何在 Google Sheets 中通过自定义函数实现 AJAX 调用。具体介绍了编写脚本的方法,以便在电子表格中发起 AJAX 请求,从而实现数据的动态获取与更新。这种方法不仅简化了数据处理流程,还提高了工作效率。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
author-avatar
爱音乐的李雪梅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有