Questions tagged [ruby]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

Filter by
Sorted by
Tagged with
0 投票
1 回答
5604 浏览

Ruby:遍历常量

我刚刚开始在 Ruby 中使用常量。

我有

我想要做

但它说

……

有没有一种迭代常量列表的好方法?

0 投票
2 回答
431 浏览

创建 Ruby 时间对象导致垃圾收集问题

我是一个绝对的新手,甚至没有计算机科学背景。我只是一名机械工程师,试图实现一种远程监控我们安装的太阳能系统中逆变器的功率输出(和其他输出数据)的方法。所以如果我说了什么非常愚蠢的话,我提前道歉。

我正在尝试编写一个小的 ruby​​ 程序,它将存在于我的 ror 网站的数据库文件夹中。每 15 分钟(只要系统在线发电),我希望它轮询客户逆变器的数据(通过 TCPSocket 连接到连接到客户逆变器的网关)并用新数据更新我网站的数据库文件. 我的循环看起来像这样:

当我第一次运行它时,它抛出了一个 Segmentation Fault 错误。然后我把它放在GC.disable上面,它工作正常(直到我在几分钟后强制退出),但这只是为了看看它是否是一个垃圾收集问题,它似乎是第一次创建时间对象触发问题(引发分段错误错误)。我知道我显然不能为无限循环禁用垃圾收集。但是我如何用红宝石“清理自己”?我可以在每次循环结束时以某种方式释放这些时间对象吗?我看到了一篇关于 的帖子GC.start,但不太明白它是如何工作的。

还有一种方法可以运行我的程序并查看它使用了多少 RAM?我将不胜感激任何人在这里可以给我的任何建议。(包括关于我在开头描述的太阳能输出监控系统的一般架构的建议!)

到目前为止,我已经从查看这里的所有帖子中受益匪浅,我提前感谢您!

0 投票
1 回答
3733 浏览

Michael Hartl 的 Rails 教程:Rspec 的“预期响应是重定向到 ...”是错误的

在 Michael Hartl 的(精彩的)Rails 教程中,我遇到了一个意外的 Rspec 测试失败,格式如下:

“预期的响应是重定向到 < http://test.host/signin > 但重定向到 < http://test.host/signin?notice=Please+sign+in+to+access+this+page . >。”

(在第 10.3 节中可以找到。)因此,从错误中可以看出,服务器正在重定向到相应的页面,除了“请登录”的附加通知。测试代码如下所示:

我在这里做错了吗?我应该如何最好地解决这个问题?


更新:

如果我将代码更改为

然后我得到了实际的 Ruby 错误

失败/错误:flash[:notice].should =~ /sign in/i 预期:/sign in/i,得到:nil(使用 =~)


解析度

问题是我的 deny_access 函数中省略了逗号:

本来应该

这解决了它。现在,这个修复的副作用很有趣,不是吗?这是否意味着它signin_path本身就是一个可以将散列或参数附加到路径末尾的函数?奇怪,狂野,美妙。

0 投票
1 回答
2758 浏览

Ruby:错误的参数类型 nil(预期数据)

我收到错误:

这是我的代码(名称已更改以保护无辜者;)):

我怀疑这是一个范围问题,但我不确定。任何指针将不胜感激。谢谢!

这里的目标是检查用户是否提交了任何foos具有bar已存在属性的内容。我为含糊不清道歉,但这是我能做的最好的。

0 投票
1 回答
334 浏览

Hpricot 去除单个元素

我正在使用 Ruby 的 Hpricot gem 来解析 html。我想从文档中删除一个节点以在其他地方使用,但我找不到方法。

我看到我可以使用 Hpricot::Elements ( x = (doc/"div").remove) 的实例删除整个元素列表,但我只想删除给定标记的第一个实例

四处寻找,我看到我只是用注释节点或空格 ( x.inner_html = '') 替换元素的内部文本的建议,但这阻止了我在其他地方使用该节点。

我能做些什么?

规格:Ruby 1.8.7,Hpricot 0.8.4

0 投票
1 回答
841 浏览

Ruby 元编程:将@variables 添加到现有的“初始化”方法(使用 class_eval)

可能重复:
Ruby.Metaprogramming。class_eval

我有这个小项目,目标是创建一个“attr_accessor_with_history”方法,它将记录分配给它创建的变量的每个值。这是代码:

现在,当我为一个变量测试脚本时。它工作正常。但是当我尝试创建两个或更多变量时(像这样)......

....Ruby 为 (class_eval) bar_history.push(new_value) 提供了一个“不存在的‘push’方法”。我认为“初始化”方法在 attr_accessor_with_history 的第二次调用中被覆盖,因此第一个变量的记录被破坏。

我不知道如何解决这个问题。我已经尝试调用 'super' 。有什么线索吗?

0 投票
3 回答
48207 浏览

Rails 3 - 通过控制器中的正则表达式检查字符串/文本是否包含某个单词/字符

我正在我的应用程序中开发一种引用机制,例如,应该可以在评论表单中简单地键入 #26 以引用该主题的评论 26。
为了首先检查用户是否想要引用一个或多个评论,我在 current_user.comments.build 之后和 @comment.save 之前放置了一个 if 条件。
但是,只是为了让我的问题更笼统,更容易适应:

我想要这样的东西。该示例用于检查评论的内容是否包括电子邮件。但从逻辑上讲,我收到“无法将正则表达式转换为字符串”错误。

你怎么能做包括?带有正则表达式的rails方法?那么,要检查文本是否包含某种正则表达式格式的字符串?

或者控制器是此类正则表达式操作的错误位置?

0 投票
3 回答
893 浏览

压缩和解压 Stack Overflow 主页 HTML

我正在尝试用 JavaScript 压缩 HTML 并用 Ruby 解压缩它。然而,一些carachter 没有得到正确处理,我正在寻找一种方法来解决这个问题。

我的压缩函数首先使用此函数将 html 转换为字节数组。然后它使用js-deflate 库压缩数组。最后,使用window.btoa()对输出进行 base64 编码。

在 Ruby 方面,我有一个Decompression类,它首先对压缩的 html 进行 base64 解码。然后它使用 RubyZlib标准库来解压缩 html。此Stack Overflow 问题线程中描述了此过程。

我正在使用这个类来膨胀压缩的 html,它被发送到本地服务器,并将其写入文件。

然后我在浏览器中打开文件,看看它是否正确。

在大多数情况下,这工作正常。我可以处理 Stack Overflow 主页,结果如下:

已处理的 Stack Overflow 主页

你可以看到有一些问题。有些字符没有正确显示,最明显的是标题中我名字旁边的向下箭头

向下箭头

以及最近标签列表中的乘号

最近的标签列表

如何修复我的代码以便正确处理页面的这些部分?

我试图强制对膨胀的 html 进行编码,UTF-8但它并没有改变任何东西。

一个关键是字符串的编码似乎在ASCII-8BIT经过 Base64 解码后更改为:

编辑

有人首先询问我用来获取 html 的方法。我只是用 jQuery 把它从页面上拉下来:

编辑以显示将Content-Type元标记添加到膨胀的 html 的效果

我添加<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />到膨胀的 html 中。我现在得到这样的问号框(顺便说一下 Chrome 浏览器):

问号框.

如果我检查我的膨胀 html 的来源并将其与实际 Stack Overflow html 的来源进行比较,我可以看到我的名字旁边的倒三角形使用了不同的字符。

实际 SO 来源: <span class="profile-triangle">&#9662;</span>
没有元 Content-Type 的 <span class="profile-triangle">¾</span>
膨胀源:具有元 Content-Type 的膨胀源: <span class="profile-triangle">�&lt;/span>

0 投票
2 回答
188 浏览

在数组中添加元素

我有以下问题:

  1. 有一个由 6 个数字组成的数组,每个数字最多两位数。
  2. Y是一个数组,其第i个元素是第一个数组的前i +1个元素的总和。
  3. 通过键盘接受数字输入。如果它与Y中的一个数字匹配,则显示一条消息;如果没有,请重新启动程序。

图表

这是我正在考虑的算法:

  • 初始化空数组 [x] & [y]
  • 6.times.map{ Random.rand(1..99) }
  • 使用每个添加数字吗?
  • 存储在数组 [y]
  • 将输入与 == 数组 [y] 进行比较
  • 如果任何实例匹配显示消息,否则重新启动

对于这个问题的任何指导或帮助,我将不胜感激。

0 投票
4 回答
151 浏览

Ruby 模块中的访问方法

我正在编写我的第一个 Ruby 模块,我有这个:

/app/module/test_modules/test.rb

test.rb 看起来类似于:

当我从控制台调用以下命令时,我得到:

如何使 test() 可见?


15 30 50 per page
1
2 3 4 5
1498226