Tag: ruby

将块传递给方法 – Ruby

我对传球有一点疑问。 def a_method(a, b) a + yield(a, b) end 这很好用。 k = a_method(1, 2) do |x, y| (x + y) * 3 end puts k 但这不起作用。 puts a_method(1, 2) do |x, y| (x + y) * 3 end # LocalJumpError: no block given (yield) 任何人都可以向我解释这个吗? 谢谢。 Paolo Perrotta从Metaprogramming Ruby获取的示例。 好书。

为什么Ruby String#split不将连续尾随分隔符视为单独的实体?

我正在阅读一个政府文本文件,其中$被用作分隔符,但我认为分隔符不重要… 所以这是预期的: ‘a$b$c$d’.split(‘$’) # => [“a”, “b”, “c”, “d”] 在我正在使用的数据文件中,列标题行(第一行)被统一填充,即没有空标题,如: ‘a$b$$d’ # or: ‘a$b$c$’ 但是,每行可能有连续的尾随分隔符,例如: “w$x$$\r\n” 通常,我会阅读每一行并扼杀它。 但是这会导致String#split将最后两个分隔符视为一列: “w$x$$\r\n”.chomp.split(‘$’) # => [“w”, “x”] 不做chomp得到我想要的结果,虽然我应该选择最后一个元素: “w$x$$\r\n”.split(‘$’) # => [“w”, “x”, “”, “\r\n”] 所以我要么: 如果最终的非换行符不是连续的分隔符, 则选择该行 保留换行符,进行拆分,然后在最终字符为连续分隔符时选择最终元素 这看起来真的很尴尬……我在这里错过了一些东西吗?

rails控制器是multithreading的吗? 控制器中的Thread.exclusive

Rails控制器是multithreading的吗? 如果是这样,我是否可以通过简单地执行从多个线程运行来保护某段代码(每十分钟仅触发一次) require ‘thread’ Thread.exclusive do # stuff here end 我需要以某种方式在显示器上同步吗?

最短的ruby奎因

刚读完这篇博文: http : //www.skorks.com/2010/03/an-interview-question-that-prints-out-its-own-source-code-in-ruby/ 在其中,作者辩称使用quine作为面试问题的案例。 我不确定我是否同意,但这不是这个问题的内容。 他继续用Ruby构建一个quine并重构它以缩短它。 然后,他挑战读者,试着让它更短。 我玩了一会儿,想出了以下内容: s=”s=;puts s[0,2]+34.chr+s+34.chr+s[2,36]”;puts s[0,2]+34.chr+s+34.chr+s[2,36] 这是我第一次尝试过quine,我无法弄清楚如何缩短它。 你能想出的最短的Ruby quine是什么? 如果您的实施需要,请发布解释。

在Rails中更改错误字段名称

我想知道是否有一种方法可以更改与之关联的validation错误的字段名称。 例如,如果我在没有任何数据的情况下提交名字(在表格中真的是fname ),那么它叫喊Fname can’t be blank. 是否可以将此更改为First Name can’t be blank ?

在我的应用程序上使用Devise注销问题

我正在更新我的应用程序,所以我使用Devise gem进行身份validation。 一切似乎都很有效,除了我似乎无法退出的事实。 我收到错误: Couldn’t find User with ID=sign_out Parameters: {“id”=>”sign_out”} 我可以将错误追溯到我的用户控制器中的show动作: def show @user = User.find(params[:id]) end 问题是我不确定为什么它试图为我的用户呈现show动作。 总的来说我的页面有这样的格式 根据设计说明,我的注销路径如下所示: 如果用户未登录,则应呈现基本上是静态html的启动页面。 有关如何帮助的任何建议? 即使你可以把我放在正确的球场上就问题而言会非常感激。 Here is my routes file: devise_for :users resources :users do member do get :following, :followers, :following_tags, :following_posts end end resources :posts resources :votes resources :comments resources :tags resources :events #resources :posts, […]

Nokogiri和XPath中未定义的名称空间前缀

我正在尝试解析Youtube Gdata以查看是否存在具有给定ID的video。 但是没有正常的标签,但有命名空间。 在链接http://gdata.youtube.com/feeds/api/videos?q=KgfdlZuVz7I上有标记: 1 有命名空间openSearch: xmlns:openSearch=’http://a9.com/-/spec/opensearchrss/1.0/’ 但我不知道如何在Nokogiri和Ruby中处理它。 这是代码的一部分: xmlfeed = Nokogiri::HTML(open(“http://gdata.youtube.com/feeds/api/videos?q=#{video_id}”)) xmlfeed.at_xpath(“openSearch:totalResults”) 它给出了错误: Undefined namespace prefix: openSearch:totalResults

为什么array.each行为依赖于Array.new语法?

我正在使用Ruby 1.9.2-p290并发现: a = Array.new(2, []).each {|i| i.push(“a”)} => [[“a”, “a”], [“a”, “a”]] 这不是我所期望的。 但是下面的构造函数样式确实做了我所期望的: b = Array.new(2) {Array.new}.each {|i| i.push(“b”)} => [[“b”], [“b”]] 第一个例子是预期的行为吗? 在ruby-doc中,看起来我的size=2参数对于两个构造函数都是相同的参数。 我认为如果each方法都传递了这个参数,它将以相同的方式为两个构造函数使用它。

你如何在Rails应用程序中“生成”一个EventMachine?

我有一个Rails应用程序,我希望为它添加某种WebSocket支持。 从各种Google搜索,似乎最好的基于Ruby的WebSocket解决方案是在EventMachine上运行的em-websocket 。 我想知道是否有办法将EventMachine反应器“集成”到Rails中? 我在哪里放置初始化代码? 这是实现这个目标的正确方法吗? 我已经看到这个回到Sinatra的例子来做一个EventMachine GET请求,但这并不是我想要的。 任何帮助表示赞赏。

Rails:使用序列化哈希编码问题,尽管UTF8

我刚刚从ruby 1.9.2更新到ruby 1.9.3p0(2011-10-30修订版33570)。 我的rails应用程序使用postgresql作为其数据库后端。 系统区域设置是UTF8,数据库编码也是如此。 rails应用程序的默认编码也是UTF8。 我有中国用户输入汉字和英文字符。 字符串存储为UTF8编码的字符串。 Rails版本:3.0.9 由于更新,数据库中的一些现有中文字符串不再正确显示。 这不会影响所有字符串,只会影响序列化哈希的一部分。 存储为纯字符串的所有其他字符串仍然看起来是正确的。 例: 这是一个序列化哈希,在数据库中存储为UTF8字符串: broken = “— !map:ActiveSupport::HashWithIndifferentAccess \ncheckbox: \”1\”\nchoice: \”Round Paper Clips \\xEF\\xBC\\x88\\xE5\\x9B\\x9E\\xE5\\xBD\\xA2\\xE9\\x92\\x88\\xEF\\xBC\\x89\\r\\n\”\ninfo: \”10\\xE7\\x9B\\x92\”\n” 为了将此字符串转换为ruby哈希,我使用YAML.load反序列化它: broken_hash = YAML.load(broken) 这将返回带有乱码内容的哈希: {“checkbox”=>”1”, “choice”=>”Round Paper Clips ï¼\u0088å\u009B\u009Eå½¢é\u0092\u0088ï¼\u0089\r\n”, “info”=>”10ç\u009B\u0092”} 乱码的东西应该是UTF8编码的中文。 broken_hash[‘info’].encoding告诉我ruby认为这是# 。 我不同意。 有趣的是,之前没有序列化的所有其他字符串看起来都很好。 在同一记录中,不同的字段包含看起来正确的中文字符—在rails控制台,psql控制台和浏览器中。 每个字符串—无论是序列化哈希还是普通字符串—都保存到数据库中,因为更新看起来也很好。 我试图将乱码文本从可能的错误编码(如GB2312或ANSI)转换为UTF-8,尽管ruby声称这已经是UTF-8了,当然我失败了。 这是我使用的代码: require ‘iconv’ Iconv.conv(‘UTF-8’, ‘GB2312’, broken_hash[‘info’]) 这失败了,因为ruby不知道如何处理字符串中的非法序列。 我真的只想运行一个脚本来修复所有旧的,可能是破坏的序列化哈希字符串并完成它。 有没有办法将这些断弦转换成类似中文的东西? 我只是在原始字符串中使用编码的UTF-8字符串(在上面的示例中称为“已损坏”)。 这是在序列化字符串中编码的中文字符串: […]