< >头 11个最佳的自由Ruby on Rails开发者[在48小时内雇佣-PT视讯 > < /头 <身体>
Ruby on Rails

雇佣 排名前3% of 自由Ruby on Rails开发者

PT视讯是最好的Ruby on Rails开发者的市场, 工程师, 程序员, 程序员, 架构师, 自由职业者, 和顾问. 顶级公司和初创企业选择PT视讯 Ruby on Rails开发服务来进行关键任务软件项目.

无风险试验,满意才付款.

客户的速度 PT视讯 Ruby on Rails开发者4.4 / 5.0截至2022年1月1日,平均有636次评论

被领先品牌和初创公司所信赖

雇佣自由Ruby on Rails开发人员和工程师

达斯汀·卡斯

自由Ruby on Rails开发者

美国2018年9月1日起成为PT视讯会员

达斯汀是一名专业的前端工程师,在大大小小的公司和机构工作了十多年. 他对自己的工作充满激情和奉献精神, 而且他总是为他的雇主和客户多做一点.

显示更多

大卫梁

自由Ruby on Rails开发者

美国2017年10月23日起成为PT视讯会员

David是一位拥有超过12年web开发经验的全栈工程师, 管理开发过程的所有方面. 他参与了50多个项目,解决了包括市场营销在内的各种行业的复杂商业问题, 医疗保健, 电子商务, 房地产, 和汽车保险. 大卫在增加利润的同时一直在节约成本. 他已经准备好利用自己的技能为你的收入带来指数级增长.

显示更多

沈从文马

自由Ruby on Rails开发者

美国2017年11月4日起成为PT视讯会员

从文是一位专注于使用实用框架开发全栈web应用程序的web开发人员. 他热衷于为别人解决问题——对他来说,一个好的解决方案通常需要一定的创造力,然后需要更多的努力去适应和完善.

显示更多

特雷弗·瓦格纳

自由Ruby on Rails开发者

美国2016年5月25日成为PT视讯会员

Trevor是一个混合的全LAMP堆栈开发人员/前端开发人员,有超过7年的经验创建自定义WordPress主题和插件, 以及根据每个客户端定制WordPress管理员.

显示更多

Eqbal古兰经

自由Ruby on Rails开发者

约旦2014年3月5日起成为PT视讯会员

equbal是一位资深的全栈开发人员,拥有超过十年的web和移动开发经验. 他是一个解决问题的高手,拥有大量的专业成品.

显示更多

被测试的班

自由Ruby on Rails开发者

罗马尼亚2015年2月3日起成为PT视讯会员

Botond是一个高度熟练的专业软件开发人员,他喜欢编写其他人可以理解和遵循的代码. 他对编程的热情始于13岁, 因为他从父亲那里收到了一台ZX频谱兼容的俄罗斯电脑. 他学习了编程,成为了一名真正的终身爱好者.

显示更多

Luis Martinho

自由Ruby on Rails开发者

葡萄牙2011年10月30日成为PT视讯会员

作为一个企业家, Luís理解主动性和结果的重要性, 并且学会了责任和责任的含义. 与其说他是个专家,不如说他是个多面手, 尽管他喜欢细节和深刻的理解,这来自于对开发项目的高度关注和工作.

显示更多

广范

自由Ruby on Rails开发者

美国2016年4月30日起成为PT视讯会员

Quang喜欢用同样令人印象深刻的代码创建漂亮的软件. 除此之外,你还拥有理解和重构大型代码库的天赋, 他相信最佳实践, 小函数, 和空白. Quang在市场营销、软件即服务、医疗保健和加密公司有超过15年的工作经验. 他还创办了公司,创建了社交网络、spa、会员网站和营销工具.

显示更多

现在就注册看看更多的资料.

开始招聘

招聘指南

雇佣优秀Ruby on Rails开发人员指南

与任何技术一样,我们需要了解Rails,然后才能真正了解Rails. 本指南提供了一些问题样本,这些问题是评估考生掌握框架的广度和深度的关键.

阅读招聘指南

Ruby on Rails租用资源

雇佣Ruby on Rails开发人员的更多资源

工作描述模板

面试问题

常见的错误

技巧和实践

工作

Trustpilot
媒体报道

... 允许公司快速组建具有特定项目所需技能的团队.

尽管对编码员的需求不断增长,PT视讯却以其几乎达到常春藤盟校(Ivy league)水平的审核而自豪.

我们的客户
创建一个跨平台应用,供全世界使用
蒂埃里Jakicevic
创建一个跨平台应用,供全世界使用
奖状

如果没有PT视讯, Tripcents就不会存在. PT视讯 Projects让我们的基金会在产品经理的帮助下快速发展, 带领开发人员, 和高级设计师. 在60多天的时间里,我们从概念到Alpha. 它的速度、知识、专业技能和灵活性是首屈一指的. PT视讯团队和其他内部团队成员一样,都是tripcents的一部分. 他们和其他人一样为开发做出了贡献并获得了所有权. 我们将继续使用PT视讯. 作为一个创业公司,它们是我们的秘密武器.

首席执行官Brantley步伐 & 联合创始人

Tripcents

我对PT视讯的经验非常满意. 和我一起工作的专业人士在几个小时内就和我通了电话. 在和他讨论了我的项目后,我知道他是我想要的候选人. 我立刻雇佣了他,他也立刻参与了我的项目, 甚至通过添加一些很棒的设计元素来增强我们的整体外观.

导演保罗•Fenley

K邓恩 & 的同事

与我搭档的开发人员都非常出色——聪明、有动力、反应灵敏. 过去很难找到高质量的工程师和顾问. 现在不是.

瑞安·洛克菲勒,首席执行官

Radeeus

PT视讯立即理解了我们的项目需要. 我们请来了一位来自阿根廷的优秀自由职业者, 从第一天起, 投身于我们的行业, 与我们的团队完美融合, 理解我们的愿景, 并产生了一流的结果. PT视讯使得与高级开发人员和程序员的联系非常容易.

Jason Kulik创始人之一

ProHatch

作为一家资源有限的小公司,我们不能犯代价高昂的错误. PT视讯为我们提供了一个经验丰富的程序员,他能够立即投入工作并开始贡献. 这是一个伟大的经历,我们会在心跳中再次重复.

斯图尔特·柏克尼校长

站点专用软件解决方案

我们通过PT视讯聘请了一位拥有丰富亚马逊网络服务经验的开发人员. 我们面试了四位候选人,其中一位非常符合我们的要求. 这一过程迅速而有效.

Abner Guzmán Rivera,首席技术官和首席科学家

照片Kharma

Sergio是一个非常棒的开发者. 一流,反应灵敏,工作效率高.

Dennis Baldwin,首席技术专家和联合创始人

PriceBlink

和Marcin一起工作是一种乐趣. 他是主管, 专业, 灵活的, 并且非常快地理解需要什么以及如何实现它.

Andre Fischer首席技术官

POSTIFY

我们需要一位专业的工程师,他能立即开始我们的项目. Simanas的工作超出了我们的预期. 不需要面试和寻找专业的开发人员是一个非常好的时间节省,并使每个人对我们选择转换平台以使用更健壮的语言感到更舒服. PT视讯让这个过程变得简单和方便. PT视讯现在是我们寻求专家水平帮助的第一个地方.

Derek Minor,网络开发高级副总裁

Networld传媒集团

PT视讯的开发人员和架构师都非常专业,也很容易共事. 他们所提供的解决方案价格合理且质量上乘,从而缩短了我们的发行时间. 再次感谢,PT视讯.

首席执行官杰里米鞋号

Kognosi

PT视讯给我们带来了很棒的体验. 他们为我们的应用程序匹配了完美的开发人员,使这个过程非常容易. 它也很容易超出最初的时间框架, 我们能够在整个项目中保持同一个承包商. 我们强烈推荐PT视讯快速无缝地寻找高质量人才.

瑞安莫首席技术官

应用商业技术有限公司

PT视讯给我留下了深刻印象. 我们的开发人员每天都和我交流,他是一个非常强大的程序员. 他是一个真正的专业人士,他的作品非常出色. PT视讯 5星.

首席执行官皮特Casoar

Ronin Play Pty Ltd

与PT视讯合作是一次很棒的经历. 使用它们之前, 我花了很长时间采访其他的自由职业者,却没有找到我需要的. 在与PT视讯接触后,他们在几天内就为我找到了一个完美的开发者. 与我一起工作的开发人员不仅交付高质量的代码, 但他也会对一些我没有想到的事情提出建议. 我很清楚阿莫里知道他在做什么. 强烈推荐!

首席执行官乔治•程

Bulavard公司.

作为一名合格的PT视讯前端开发人员,我还经营着自己的咨询业务. 当客户来找我帮忙填补他们团队中的关键角色时, PT视讯是我唯一放心推荐的地方. 托普塔尔的所有候选人都是精英中的精英. PT视讯是我在近五年的专业在线工作中发现的最物有所值的.

伊桑•布鲁克斯首席技术官

Langlotz专利 & 商标工作的公司.

在讨价还价早期, 我们需要一流的开发人员, 以可承受的利率, 及时地. PT视讯交付!

首席执行官劳拉Aldag

讨价还价

PT视讯让你非常容易找到一个候选人,并让你放心,他们有能力提供. 我肯定会向任何寻找高技能开发人员的人推荐他们的服务.

Michael Gluckman,数据经理

Mxit公司——

PT视讯能够迅速将我们的项目与最优秀的开发人员匹配起来. 开发人员已经成为我们团队的一部分, 我对他们每个人所表现出的敬业程度感到惊讶. 对于那些希望与最好的工程师远程工作的人来说,PT视讯是最好的选择.

创始人Laurent爱丽丝

Livepress

PT视讯让找到合格的工程师变得轻而易举. 我们需要一个有经验的ASP.净 MVC架构师来指导我们的初创应用程序的开发, PT视讯在不到一周的时间里就有了三个很好的候选人. 在我们做出选择后,工程师立即上线并开始工作. 这比我们自己发现和审查候选人要快得多,也容易得多.

联合创始人杰夫•凯利

协同解决方案

我们需要一些短期的Scala开发工作,PT视讯在24小时内就为我们找到了一个优秀的开发人员. 这是任何其他平台都不可能实现的.

弗兰科斯巴达,创始人之一

WhatAdsWork.com

PT视讯为快速发展和规模化的企业提供了不妥协的解决方案. 我们通过PT视讯聘请的每一位工程师都迅速融入了我们的团队,在保持卓越开发速度的同时,他们的工作达到了最高的质量标准.

联合创始人格雷格•金博

nifti.com

如何通过PT视讯雇佣Ruby on Rails开发人员

1

与我们的行业专家之一谈谈

PT视讯的工程总监将与您一起工作,以了解您的目标, 技术需求, 和团队动力.
2

与精心挑选的人才一起工作

几天之内,我们将为您的项目介绍合适的Ruby on Rails开发人员. 平均匹配时间在24小时以下.
3

合身,保证

与新的Ruby on Rails开发人员试用一段时间(如果满意就付费), 在订婚前确保他们是合适的人选.

常见问题

  • PT视讯 Ruby on Rails开发者有何不同?

    在PT视讯, 我们彻底筛选我们的Ruby on Rails开发人员,以确保我们只为您匹配最高水平的人才. 超过100个,每年有1万多人申请加入PT视讯网络, 只有不到3%的人能成功. 你将与工程专家(而不是一般化的招聘人员或人力资源代表)一起工作来理解你的目标, 技术需求, 和团队动力. 最终的结果是:专家从我们的网络中审查人才,定制匹配,以满足您的业务需求. 现在就开始.

  • 我可以通过PT视讯在48小时内雇佣Ruby on Rails开发人员吗?

    这取决于可用性和进度的快慢, 注册后48小时内,你就可以开始与Ruby on Rails开发人员合作. 现在就开始.

  • PT视讯 Ruby on Rails开发者的无风险试用期是什么时候?

    我们确保你和你的Ruby on Rails开发者之间的每一次接触都有长达两周的试用期. 这意味着您有时间确认订婚是否成功. 如果你对结果完全满意的话, 我们将按时间向你收费,你们的婚约想继续多久就继续多久. 如果你不完全满意,你不会被收费. 从那里, 我们有两种选择, 或者我们可以为您提供另一位可能更适合的专家,我们将与他开始第二个, 无风险试用. 现在就开始.

分享
Ruby on Rails

如何雇佣一个伟大的Ruby on Rails开发人员

这项技术

就像法国的 列车à Gr和e Vitesse (TGV) (以320公里/小时的速度旅行)大大缩短了现代铁路乘客的旅行时间, Ruby on Rails (a.k.a. “Rails”)大大减少了构建功能强大的web应用程序所需的时间和精力. Tim O 'Reilly (O 'Reilly Media的创始人)认为Rails是突破性的技术,Gartner Research在最近的一项研究中指出,许多知名公司都在使用Rails构建敏捷, 可伸缩的web应用程序.

Rails受欢迎的速度值得注意 超过20万个网站 目前用这种技术建造的. 今天,许多知名公司都在使用Rails构建敏捷的、可伸缩的web应用程序. 例如推特、GitHub、Yammer、Scribd、Groupon、Shopify和Basecamp等等.

Rails是一个web应用程序开发框架, 用Ruby编写的, 它还具有独立于web服务器的自己的路由系统. Rails的目标是显著简化web应用程序的开发, 需要更少的代码和时间来完成相同的任务.

为实现这一目标, Rails对事情“应该”如何完成进行了某些假设,然后相应地进行了设计和结构. 虽然吸收这种“Rails世界观”有时会给那些在其他语言和框架上有扎实基础的开发人员带来一些文化冲击, 随着时间的推移,大多数人会非常欣赏Rails方法及其产生的生产力.

所面临的挑战

从招聘的角度来看, Rails人气的爆炸性增长既是一个好消息,也是一个坏消息. 一方面,它使Rails开发人员更容易定位, 这也使得在他们当中找到顶级珠宝变得更加难以捉摸.

为全职或兼职工作寻找真正高质量的Rails专家需要一个高效的招聘过程, 正如我们在文章中描述的那样 在寻找精英少数-发现和雇用最好的开发人员在行业. 然后,可以用问题(如本文中提出的问题)来扩充这一过程,以确定分布在全球各地的稀疏候选人 真正的Rails专家. 找到它们的多种好处很可能会体现在它们将能够实现的生产力和结果中.

是的,我知道Rails…

Rails简化和简化web应用程序开发的程度可能会误导新手开发人员,使他们低估其功能,并过度简化其概念基础. 虽然Rails相对容易使用,但它一点也不简单.

与任何技术一样,需要了解Rails,然后 真的 了解Rails. 在我们寻找语言大师的过程中, 我们需要一个能够准确量化候选人在Rails专业知识连续体中的位置的面试过程.

朝着这个目标, 本指南提供了一些问题样本,这些问题是评估考生掌握语言的广度和深度的关键. 不过,重要的是要记住,这些示例问题只是作为一个指导. 并不是每一位值得雇佣的“A”候选人都能正确回答所有问题, 也不能保证回答所有这些问题就能得到一个“A”候选人. 说到底,招聘既是一门科学,也是一门艺术.

频繁的铁路旅行?

经常会遇到这样的RoR开发人员,他们对Rails的基础知识和关键范例的掌握要么很弱,要么有点混乱.

有助于评估开发人员对Rails基础掌握程度的问题, 包括一些更微妙的细微差别, 因此这是面试过程中的一个重要组成部分吗.

下面是一些例子:

Q:解释一下Rails请求的处理流程.

在最高的层次上, Rails请求是通过应用服务器来服务的, 哪个负责将传入的请求引导到Ruby进程中. 使用架 web请求接口的流行应用服务器包括 Phusion乘客, 杂种, , 独角兽.

架解析所有请求参数(以及提交的数据), CGI参数, 以及其他可能有用的信息),并将它们转换成一个大的 哈希 (Ruby的记录/字典类型). 这有时被称为 env 哈希,因为它包含关于web请求环境的数据.

除了这个请求解析之外, 架是可配置的, 允许某些请求被定向到特定的机架应用程序. 如果你想要, 例如, 在你的管理部分的任何请求重定向到另一个Rails应用程序, 您可以在架级别上这样做. 除了能够在Rails中声明中间件之外,还可以在这里声明中间件.

那些要求 在其他地方(由你在架中)定向到你的Rails应用程序,它开始与Rails交互 ActionDispatcher,它负责检查路线. Rails应用程序可以被分解成独立的程序 Rails引擎,然后路由器将请求发送到正确的引擎. (你也可以将请求重定向到其他机架兼容的web框架.)

一旦进入应用程序,Rails中间件(或您的定制中间件)就会被执行. 路由器决定应该调用哪个Rails控制器/动作方法来处理请求, 实例化正确的控制器对象, 执行所有涉及的过滤器, 最后调用适当的action方法.

进一步的细节 可以在Rails文档中找到.

Q:描述Rails资产管道以及它如何处理资产(如JavaScript和CSS文件).

Rails 3.1介绍了 资产管道这是一种组织和处理前端资产的方法. 它提供了一个导入/要求机制(加载依赖文件),该机制提供了许多特性. 而资产管道确实有其粗糙的边缘, 它解决并提供了许多在HTTP 1下服务这些文件的现代最佳实践.1. 最重要的是,资产管道将:

  • 收集、连接和 使变小 每种类型的所有资产都放在一个大文件中
  • 版本文件使用指纹识别来销毁浏览器缓存中的旧版本文件

资产管道自动带来了Rails的选择 Coffeescript 作为它的JavaScript预处理/ transpiled 选择的语言和 萨斯 作为它的CSS转换语言. 然而, 作为一个可扩展的框架, 它允许使用额外的编译语言或额外的文件源. 例如, Rails的资产 带来的力量 鲍尔 到你的Rails应用程序,允许你管理第三方JavaScript和CSS资产 非常 很容易.

问:什么是活动记录,什么是雷尔? 描述每一个的能力.

活动记录 马丁·福勒在他的书中描述了什么 企业应用程序架构的模式 作为“包装数据库表或视图中的行的对象”, 封装数据库访问, 并在数据上添加域逻辑".

ActiveRecord既是一种对象关系映射(Object Relational Mapping, ORM)设计模式, 以及Rails对该设计模式的实现. 这意味着抓取, 查询, 将对象存储在数据库中是对象API的一部分,也是自定义业务逻辑的一部分. 开发人员可能会将此视为不希望看到的副作用, 或者作为一个受欢迎的惯例, 这取决于他们的偏好和经验水平.

服装 为ActiveRecord提供了查询API, 允许Ruby on Rails开发专家执行数据库查询,而无需手写SQL. 雷尔创建了一个延迟执行的SQL, Rails会等到最后一秒才将SQL发送到服务器执行. 这允许您获取一个服装查询,并向查询添加另一个SQL条件或排序, 直到Rails实际执行查询为止. 除非另有说明,否则服装会从查询中返回ActiveRecord对象.

问:什么是配置约定模式? 提供如何在Rails中应用它的例子.

配置公约(CoC) 一个软件设计模式是由什么 非传统的 应用程序的各个方面需要由开发人员指定. 当默认约定与期望的行为匹配时, 在不需要任何配置的情况下遵循默认行为. 其目标是简化软件开发, 而不牺牲流程中的灵活性和可定制性.

以下是一些如何在Rails中应用CoC原则的例子:

  • 模型和数据库表命名. Rails自动使类名多元化,以查找各自的数据库表. 例如,对于Book类,它需要一个名为books的数据库表. 对于由多个单词组成的类名,模型类名应该使用CamelCase (e.g., 读书俱乐部book_clubs).
  • 主键和外键. 默认情况下,Rails使用一个名为 id 作为表的主键. 默认情况下,外键名称遵循附加模式 _id 到单数表名(e.g., item_id 为一个外键进入 项目 表).
  • 自动功能的保留字. 还有一些可选的列名, 如果使用, 自动向Rails数据库表添加特性和功能. 创建d_at,例如,将自动设置为记录创建时的日期和时间. 同样的, updated_at 是否自动设置为记录最后一次更新的日期和时间.
  • 类定义的自动加载. 自动加载是一种“魔法”,通过它类看起来可以从任何地方访问, 不需要显式地要求它们. 它是如何工作的:当您在代码中引用一个类时, Rails将类名(带有名称空间)作为字符串, 调用 下划线 ,并查找具有该名称的文件(在所有目录中指定 配置.autoload_paths). 例如,如果引用一个名为 文件句柄:ZipH和ler, Rails会自动搜索 $ file_h和le / zip_h和ler.rb 在你的 配置.autoload_paths. 这个特性经常导致Rails新手程序员认为他们不需要显式地要求引用的类,Rails会自动神奇地找到它们. 然后,当他们没有遵循这个约定,并且突然被Rails告知他们的类找不到时,他们会感到困惑.

需要注意的是,CoC指定了一个默认的——但不是不可变的——约定. 因此,Rails确实提供了覆盖这些默认约定的机制. 作为一个例子, 可以通过指定 ActiveRecord:: Base.table_的名字 如下所示:

class Product < ActiveRecord:: Base
  自我.table_的名字 = " LEGACY_PRODUCT_TABLE "
结束

问:什么是“胖模型瘦控制器”方法? 讨论它的一些优点和缺点,以及一些替代方案.

“胖模型瘦控制器”是一种基于mvc的Rails设计模式.

MVC is it自我 a software design pattern that separates a system into three separate 和 distinct layers; 的名字ly, 模型, 视图, 和控制器. MVC努力通过清晰定义的api来确保每一层之间的清晰分离. 在设计良好的MVC系统中, 这些api作为牢固的边界,帮助避免实现在MVC逻辑上不同的子系统之间扩展“触角”.

“胖模型瘦控制器”设计模式提倡在模型中放置尽可能多的逻辑(a)最大限度的重用和(b)更容易测试的代码.

也就是说, Rails开发人员的一个常见陷阱是,由于过于盲目地坚持“胖模型”,最终导致“过度膨胀”的模型, 瘦控制器”范式. 臭名昭著的用户模型就是一个很好的例子. 因为许多Rails应用程序都是关于用户向系统输入数据的, 或者在社交上与朋友分享信息, 用户模型通常会获得越来越多的方法, 最终到达了那个点 用户.rb 模型变得笨重,尺寸变得难以管理.

一些值得考虑的关键替代方案包括:

  • 使用其他对象:将功能从模型中提取到其他对象中(例如decorator或Service对象)
  • Rails的六边形架构:采用六边形架构,将应用程序视为一个六边形, 每一边都代表应用程序需要的某种外部交互.
  • 数据上下文交互:而不是专注于单个对象, 关注数据及其上下文之间的通信和交互.

问:描述一下Rails的测试理念.

Rails从框架一开始就构建了测试支持, 它成为了文化的一部分. 因此,在Rails环境中有大量可用的测试工具.

默认情况下,Rails 4.0 +使用 小型试验 底层的Ruby标准库测试框架.

在Rails项目中,每个层(模型)的测试都有定义良好的位置, 控制器, 路由, 视图, 模型), 以及集成测试. 因为Rails的MVC基础, 通常这些层(集成测试除外)可以在不依赖其他层的情况下进行测试.

例如, 我们可以创建一个数据库记录, 在测试运行之前, 它包含我们期望测试返回的属性. 我们的测试可以集中于确保我们的show post 控制器 action通过检查它是否返回我们在上面创建的对象来获取我们想要的post. 如果不是,那么一定是出了什么问题,或者我们的代码有bug. 下面是这样一个测试的例子:

class PostsControllerTest < ActionController::TestCase
  设置完成
    @post =文章(一):
  结束

  测试“应显示帖子”做
    获取:show, id: @post
    assert_response:成功
  结束
结束

集成测试(通常称为特性测试)通常会驱动应用程序,就像用户单击按钮一样, 使用测试工具,如 水豚 (它可以以多种方式模拟用户行为,包括嵌入式驾驶 WebKit,或者使用 ).

虽然小型试验是Rails开箱即用的标准,但您经常会看到 RSpec 宝石代替. 这为测试提供了一种特定于领域的语言,它可能比小型试验更容易阅读.

一些Rails项目使用 黄瓜测试框架 用简单的英语句子描述软件行为. 这在与现场客户或专用QA资源合作时非常有用. 在理想世界中, 这些非开发人员可以编写自动化的集成测试,而不需要看到一行Ruby代码.

在铁轨上

有过大量Rails工作经验的人应该对Rails的功能非常熟悉, 构造, 和特性. 这些问题展示了衡量该专业知识的广度和深度的方法.

问:解释用法 收益率content_为 在布局. 提供的例子.

收益率 标识视图中的内容应该插入到何处. 最简单的方法是有一个 收益率,将当前正在渲染的视图的全部内容插入其中,如下所示:


  
  
  
    <%= 收益率 %>
  

你也可以创建一个包含多个屈服区域的布局:


  
        <%= 收益率 :head %>
  
  
        <%= 收益率 %>
  

视图的主体总是呈现为未命名的 收益率. 将内容呈现为命名的 收益率,可以使用 content_为 方法. content_为 允许将内容插入一个命名的 收益率 布局中的块. 这对于包含不同区域的布局很有帮助, 比如边栏和页脚, 插入不同的内容块. 它还可以用于插入标签,将特定于页面的JavaScript或CSS文件加载到其他通用布局的头文件中.

顺便提一下,一个很好的后续问题是:如果你打电话来会发生什么 content_为:头 多次? 答案是所有的值都被连接起来.

问:什么是N+1个查询,如何避免它们?

考虑以下代码,它找到10个客户端并打印它们的邮政编码:

客户=客户.限制(10)
客户.每个做客户端| |
  将客户端.address.邮政编码
结束

This code actually executes 11 queries; 1 (to 找到 10 客户) 和n 10 more (one per each client to load its address). 这被称为“N+1查询”(在本例中,N为10)。.

立即加载 加载返回的对象的相关记录的机制是什么 模型.找到 使用尽可能少的查询.

活动记录的快速加载功能允许您指定,从而可以显著减少查询的数量 提前 所有将要加载的关联. 这是通过调用 包括 (or 预加载)的方法(ActiveRecord::关系对象正在被构建. 与包括, 活动记录确保使用尽可能少的查询数量加载所有指定的关联.

因此,我们可以重写上面的代码以使用 包括 方法如下:

客户=客户.包括(地址):.限制(10)
客户.每个做客户端| |
  将客户端.address.邮政编码
结束

这段代码的修订版本将只执行2个查询, 由于急于加载, 而在原始版本中只有11个查询.

Q:什么是Rails中的“过滤器”? 描述三种类型的过滤器, 包括如何以及为什么使用它们, 以及它们被执行的顺序. 提供的例子.

过滤器 本质上是在控制器动作之前、之后或周围运行的回调方法:

  • 过滤方法之前 是否在控制器动作之前运行,因此可能会停止请求周期. 常见的之前过滤器要求用户登录才能执行某个操作.
  • 后过滤方法 是否在控制器动作后运行,因此不能停止动作被执行,但有访问即将发送到客户端的响应数据.
  • 在过滤方法 是否“包裹”了控制器动作. 因此,它们可以控制操作的执行,以及在操作执行之前和/或之后执行代码.

例如, 在一个有审批工作流的网站中, 管理员可以使用around过滤器轻松预览它们,如下所示:

class ChangesController < ApplicationController
  Around_action:wrap_in_transaction,只有::show

  私人

  def wrap_in_transaction
        ActiveRecord:: Base.交易做
          开始
            收益率
          确保
            提高ActiveRecord::回滚
          结束
        结束
  结束
结束

请注意,around过滤器也包装了渲染. 特别是,在上面的例子中,如果视图从数据库(e.g.,它将在事务中这样做,从而将数据显示给预览. 您也可以选择不屈服,自己构建响应, 在这种情况下,操作将不会运行.

执行的顺序有点棘手,理解清楚很重要. 过滤器方法的执行顺序如下:

  1. 在过滤器方法之前,按照定义的顺序.
  2. 围绕过滤器方法,按照定义的顺序.
  3. 滤波方法后,顺序相反.

也, 因为Ruby实例化类的方式, 之前的父类的筛选器方法将被运行 之前 它的子类的那些.

Q:什么是架中间件? 它与控制器过滤器/动作相比如何?

2007年,Christian Neukirchen发行了专辑 ,一个用于在Ruby中服务web请求的模块化标准接口. 架类似于其他语言中的其他类似机制,如 WSGI 在Python方面,或者 Java servlet,或者微软的 Internet服务器应用程序编程接口.

在您的Rails操作方法处理请求之前, 它们通过Rails或开发者声明的各种架中间件函数. 机架中间件通常用于执行请求清理等功能, 安全措施, 用户授权或分析.

通过运行,您可以看到可用的中间件组件列表(包括开发人员定义的和Rails定义的) rake中间件 在命令行上.

机架中间件和过滤器之间的一个关键区别是调用机架中间件 之前 Rails执行它的路由和分派,而过滤器被调用 这个路由已经发生(i.e.,当Rails正要调用你的控制器动作方法时). 像这样, 在任何可能的情况下,过滤掉在中间件中被忽略的请求是有好处的, 例如来自常见攻击url的请求(phpadmin.php 请求, 例如, 在中间件中可以丢弃吗, 因为它们永远不会在Rails应用程序中解决,可能只是一些黑客的尝试.)

Q:解释一下Rails的大规模分配漏洞是什么,以及Rails控制字段访问的方法.

当用户执行一个发布(例如,创建一个新的 用户Rails需要将所有新数据保存到数据库中. 这些数据可以通过Rails操作访问 参数个数 哈希.

因为web应用程序需要更新/保存用户更改的每个字段, Rails有一些方便的方法来处理这个问题, 叫做大规模分配助手.

例如,在Rails 4之前,创建一个新的 用户 带有参数的对象从提交的表单看起来像:

用户.创建(参数个数[:用户])

参数个数[:用户] 是否包含用户在表单上输入的元素的键. 例如,如果表单包含 的名字 领域, 参数个数[:用户][名称): 将包含在表单上输入的名称(e.g.“杰夫史密斯”).

公约和. 配置在这里再次生效: 的名字 表单中两个输入元素的名称都是吗 数据库中列的名称.

除了 创建 方法,您可以以相同的方式更新记录:

@用户 =用户.找到(参数个数 [: id])
@用户.update_attributes (参数个数[:用户])

但是,当黑客进入并编辑HTML表单添加新字段时,会发生什么呢? 例如,他们可能会猜测你有 is_admin 字段,并将其添加到HTML表单字段本身. 这意味着——即使你没有把它包含在表单中,为用户服务——你的黑客已经进入并使自己成为你的网站的管理员!

这被称为 作业质量漏洞; i.e., 在没有过滤的情况下对所有这些字段进行分配, 只是相信唯一的字段名和值将是那些在HTML表单上合法的.

Rails 3和Rails 4都有不同的方法来解决这个问题. Rails 3试图通过 attr_protected / attr_accessible 模型级的控件, 而Rails 4通过强大的参数和控制器级别的过滤机制来解决这个问题. 这两种方法都允许您限制哪些键映射到数据库列,以及哪些列被忽略. 使用这些机制,在前面 is_admin 例如,可以设置 is_admin 字段仅在代码显式修改字段值时更改, 或者只允许在某些情况下改变它.

大局

Rails的专业知识远远超出了该语言的技术细节. Rails专家将对它的优点和局限性有深入的了解和认识. 相应的, 以下是一些可以帮助评估候选人在这方面的专业知识的示例问题.

问:为什么有人说“Rails不能扩展”??

推特是最早使用Rails的非常高调的网站之一. 大概在2006-2008年的时间框架内, 推特的增长速度使得服务器错误(“失败鲸鱼”)的出现对用户来说非常常见, 这促使用户和技术专家将责任归咎于Rails. 与任何软件一样,可伸缩性问题的原因可能是复杂和多方面的. 因此,并不是所有的推特扩展问题都是rails特有的. 但这说, 重要的是要了解Rails在哪里遇到了可伸缩性问题,以及它们是如何遇到的, 或者可以, 解决.

自从推特的Rails扩展问题以来,Ruby的生态系统已经得到了改善, 在核磁共振成像 Ruby中使用了更好的内存管理技术, 和主要, 例如Ruby实现).

现代Rails应用通常通过以下一种或多种方式来缓解伸缩性问题:

  • 实现缓存解决方案(Rails 4在这里介绍了很好的进步)
  • 利用(或实现)内置自动伸缩的服务器或平台解决方案
  • 剖析昂贵的操作,并将它们从Ruby或单一的Rails应用程序中移出
  • 将一些操作放到后台/工作队列中,稍后再完成.g., 异步执行导出操作, 导出完成后,通过电子邮件通知用户一个下载链接)

虽然传统上在网站和RoR应用程序之间存在一对一的映射(i.e.,一个网站=一个Rails应用程序) 面向服务的体系结构(SOA) 通过这种方法,应用程序的性能关键部分被分割成新的/独立的应用程序,主应用程序通常通过web服务调用与之对话. 这种方法有许多优点. Perhaps most 不eworthy is the fact that these indep结束ent services can employ alternate technologies as appropriate; this might be a lightweight / more responsive solution in Ruby, 或者是写在 Scala (就像推特的例子),或者 节点.js, Clojure, or Go.

但是,编写单独的服务并不是提高Rails应用程序速度的唯一方法. 例如,Github有一个有趣的 article 它是如何剖析Rails的,并最终实现了一组C api,用于在web上执行文本转义.

问:什么时候Rails是一个很好的项目选择?

Rails是一个固执己见的框架, 它最迷人或最令人沮丧的特征是什么, 取决于你问谁. Rails已经做了一个(默认, 但可配置的)关于视图模板引擎的选择, 对象角色模型(ORM), 以及你的路线如何转化为行动.

这些选择的结果, 对于应用程序可以完全控制自己的数据库的项目,Rails是一个很好的选择, 主要返回HTML(至少不单单返回JSON), 在大多数情况下,向用户显示数据的方式与数据存储的方式一致.

因为Rails是可配置的,如果你 想要 你可以偏离Rails规范,但这通常需要付出工程成本. 想要钩到一个现有的MS SQL数据库? 你可以这么做,但你会遇到一些困难. 想要建立一个单页应用程序与Rails,返回大部分JSON对象? 您会发现,与使用HTML格式接受/响应相比,Rails的帮助并不大.

问:Rails的一些缺点是什么?

Rails通常是指超过几百行代码的代码库, 这主要与它自己的数据库对象一起工作. 如果您正在编写一个只执行计算的web服务(“给我现在的华氏温度”),Rails将添加许多您可能不需要的支持结构.

另外, rails的约定优于配置方法,这使得它有时不适合于必须与另一方控制的数据库模式进行交互的情况, 例如. 也, 在Windows企业环境中,一个基于ruby的解决方案可能很难推销, 因为Ruby对Windows的支持不如对Unix的支持那么强大.

和Python一样,Ruby默认实现中的并发故事(核磁共振成像; a.k.a. CRuby)在某种程度上受制于全局解释器锁(GIL)。, 也就是说一次只能有一个线程执行Ruby代码. (JRubyRubinius在其他Ruby实现中,没有GIL.

对于需要异步解决方案的问题(例如从多个api获取数据来执行聚合计算),基于ruby的实现可能也不是最适合的, 与社交媒体api互动, 或者是在一分钟内处理成千上万个小请求的情况下).

已经说过, 有一些工具可以在Ruby中实现基于异步回调的模式(比如 EventMachine),或使用并行的Actor模型(赛璐珞). 当然,如果你的问题符合这个范围,还有很多后台工作者机制.

最后是红宝石·Rookie,宝石学家?

要想成为一名优秀的Rails开发人员,就必须是这方面的专家 Ruby 还有编程语言. 因此,这里有一些问题来帮助评估候选人在这方面的专业知识.

Q:什么是Ruby mixins,它们是如何工作的,你会如何使用它们? 使用它们的优点是什么?潜在的问题是什么? 给出例子来支持你的答案.

“mixin”是Ruby中用来表示包含在另一个类中的模块的术语. 当一个类包含一个模块时,它就会“混合进来”(i.e.,合并)所有的方法和常量. 如果一个类包含多个模块, 它合并了所有这些模块的方法和常量. 因此, 尽管Ruby并不正式支持多继承, Mixins提供了一种机制,通过它可以在很大程度上实现多重继承, 或者至少是近似的. (一个知识渊博的候选人在讨论Ruby mixin时可能会提到多重继承.)

在内部, Ruby通过在类的继承链中插入模块来实现mixins(所以在Ruby中mixins实际上是通过继承来工作的).

考虑这个简单的例子:

学生模块
  def平均绩点
    # ...
  结束
结束

类Doctoral学生
  包括学生
  def论文
    # ...
  结束
结束

博士= Doctoral学生.新

的方法 学生 类被合并到 Doctoral学生 类,所以 博士学位 对象支持 平均绩点 方法.

需要注意的是,在Ruby中 需要 的逻辑等价 包括 其他语言的语句. 与其他语言相比(其中 包括 语句引用另一个文件的内容),即Ruby 包括 语句引用一个命名模块. 因此:

  • 对象引用的模块 包括 语句可以在同一个文件中(与包含它的类在一起),也可以在不同的文件中. 如果在不同的文件中,则 需要 语句还必须用于适当地合并该文件的内容.
  • 一个Ruby 包括 从类引用包含的模块. 作为一个结果, 如果所包含模块中方法的定义被修改, 即使在运行时, 当该方法被调用时,包含该模块的所有类都将显示新的行为.

mixin的优势并不存在, 它们也不是没有缺点,因此应该谨慎使用. 一些 潜在的缺陷 包括:

  • 实例变量名冲突. 不同的mixin可以使用具有相同名称和名称的实例变量, 如果包含在同一个类中, 会在运行时产生无法解决的冲突吗.
  • 静默重写方法. 在其他语言中,定义两次会导致错误消息. 在Ruby中,如果一个方法被定义了两次,第二个定义就会很简单(并且是静默的)!)覆盖第一个定义. 因此,在Ruby中,跨多个mixin的方法名冲突不是简单的错误, 但却会引入难以捉摸和棘手的bug.
  • 类膨胀. mixin的易用性也可能导致它们的“滥用”. 一个主要的例子是一个类有太多的mixin,因此有一个过大的公共占用空间. 耦合和内聚规则开始发挥作用, 在这样一个系统中,对频繁包含的模块的更改可能会产生灾难性的影响. 传统的继承或组合不太容易出现这种类型的膨胀. 通常情况下,将类的部分提取成混合在一起的模块,类似于通过将杂乱的东西放入大箱子来打扫房间. 看起来很干净,直到你打开垃圾桶.

Q:比较和对比Ruby中的符号和字符串? 为什么使用1和. 另一个?

符号是基于值的单例,也是不可变的对象. 与字符串, 并不是所有的符号 可能是垃圾收集.

字符串, 另一方面, 创建多个对象,即使它们共享一个值, 是可变的, 当系统处理完对象时,会被垃圾回收.

因为符号是基于值的单例(一个值只有一个符号对象, 即使它在程序中出现多次), 这使得比较两个符号是否相同变得很简单(Ruby基本上只需要比较它们的object_id值). 因此,符号通常被用作散列键, 许多库都要求使用带有特定键符号的选项哈希表.

字符串可以通过freeze方法变成不可变的(" frozen "). 然而, 而这改变了字符串的一个行为, 创建两个具有相同值的冻结字符串,仍然会得到两个字符串对象. 当你使用一个符号时,Ruby会先检查字典,如果找到了,就会使用这个符号. 如果在字典中找不到该符号, 只有这样解释器才会实例化一个新的Symbol并将其放入堆中.

如上所述的 Ruby编程语言 O 'Reilly书(作者:Matz 和 Flanigan):

Ruby解释器的典型实现维护一个符号表,其中存储了所有类的名称, 方法, 还有它知道的变量. 这允许这样的解释器避免大多数字符串比较:例如,它根据方法名在符号表中的位置来引用它们. 这将一个相对昂贵的字符串操作变成一个相对便宜的整数操作.

Symbols are also fairly ubiquitous in Ruby (predominantly a hash 关键s 和 方法 的名字s; in pre Ruby 2.1它们也被用作准关键字参数,和可怜的人的常量). 因为他们的表现, 内存和使用注意事项, 符号通常用作散列键, 许多库都希望选项哈希值带有特定的键符号.

在程序执行期间,符号不会被垃圾收集, 与字符串(, 和其他变量一样, 垃圾收集).

因为字符串和符号是不同的对象, 下面是一个例子,它经常会让经验不足的Ruby程序员措手不及.

考虑下面的哈希,例如:

irb(main):001:0> a = {:关键 => 1}
irb(main):002:0> puts (“关键”)
=> 零.

你可能期待看到 1 打印在这里,特别是如果 a 在您的程序的其他地方定义. But, as strings 和 symbols are different; i.e., 关键 (符号) “关键” (字符串)是不相等的. 因此,Ruby正确地返回 (“关键”) (尽管这对于毫无戒心的程序员来说很烦人,他们想知道她的值在哪里!)

Rails有一个类, 哈希WithIndifferentAccess, 它的作用类似于哈希对象, 不过,当作为键名使用时,它将具有相同值的字符串和符号视为等效的, 从而避免了上述问题:

irb(main):001:0> a = 哈希WithIndifferentAccess.新({:关键 => 1})
irb(main):002:0> puts (“关键”)
=> 1

有一个重要的警告. 考虑这个控制器动作:

def check_value
  Valid_values = [:bad,:ok,:excellent]
  呈现json: valid_values.包括?(参数个数[:价值].to_sym)
结束

这个看似无害的代码实际上是一个拒绝服务(DOS)攻击漏洞. 因为符号永远不会被垃圾回收(因为这里我们将用户输入强制转换为符号), 用户可以不断为这个端点提供唯一的值,它最终会耗尽足够的内存,导致服务器崩溃, 或者至少让它停下来.

Q:描述在Ruby中定义实例方法的多种方法.

实例方法当然可以定义为类定义的一部分. 但是由于Ruby支持 元编程 (这意味着Ruby代码可以自我修改), Ruby程序也可以在运行时向现有的类添加方法. 因此,Ruby中有多种定义方法的技术,如下所示:

在类定义中,使用 def (最简单的回答)

类MyObject

  def my_方法
    把“嗨”
  结束
结束

这是定义类实例方法的标准方法.

(2)在类定义中, 没有 使用 def

类MyObject
  使用使用define_方法: my_方法做
    把“嗨”
  结束
结束

使用define_方法 当Ruby实例化 MyObject 类对象,你可以在这里运行任何类型的动态代码. 例如,这里有一些代码,它只在周一运行时创建我们的方法:

要求的日期

类MyObject
  如果日期.今天.周一?
    使用使用define_方法: my_方法做
      写着"某人有周一的情况"
    结束
  结束
结束

启动应用程序 在其他任何一天的星期将执行 MyObject.新.my_方法 抛出一个不存在这样的方法的异常(即使它是在周一执行的). 这是真的:它只存在于类主体在周一被评估的情况下!

(需要注意的是,在Ruby中类也是对象,所以我们的 MyObject 类的实例化 Class 对象,就像在 一个= MyObject.新, aMyObject.)

扩展现有的类定义

Ruby还允许扩展类定义. 例如:

类MyObject
  def say_hello
    把“嘿!"
  结束
结束

类MyObject
  def say_goodbye
    把“buh-bye”
  结束
结束

上面的代码将产生 MyObject 类同时具有 say_hellosay_goodbye 方法定义.

注意,这种技术也可以用于扩展标准Ruby类或我们正在使用的其他Ruby库中定义的类. 例如,这里我们添加一个 诉苦 方法到标准的Ruby字符串类:

类字符串

  def诉苦
    把“抗议!!!"
  结束
结束

“你好”.诉苦

(4)使用 class_eval

class_eval 动态计算指定的字符串或代码块,因此可用于向类添加方法.

例如,我们可以定义类 MyObject:

类MyObject
  ...
结束

然后在稍后的时间运行一些代码来动态添加 my_方法MyObject 类:

MyObject.class_eval做
  def my_方法
    把“嗨”
  结束
结束

(5)使用 方法缺失

Ruby还提供了一个钩子来检查未定义的方法. 如果还没有定义方法,这可以用来动态添加方法. 例如:

类MyObect
  def 方法_missing (方法_的名字_as_symbol * 参数个数)
    如果方法_的名字_as_symbol ==:my_方法
      把“嗨”
    结束
  结束
结束

总结

Ruby on Rails是一个强大的快速web开发框架. 而所有开发人员都可以从它的易用性和灵活性中受益, 和任何技术一样, 那些真正掌握了它和发展过程的人将在使用它时实现最大的潜力和生产力.

然而,没有任何一份简单的指南能够完全涵盖在招聘RoR开发人员的面试中所涉及的技术主题的广度和深度, 这里提供的问题为识别那些在Rails框架及其范例中拥有健全和原则基础的人提供了一个有效的基础.

特色PT视讯 Ruby on Rails出版物

顶级Ruby on Rails开发人员需求量很大.

开始招聘
身体< / >< / html >