接下来与if。在一个.each循环中?

我有一个文本处理的东西,我在Ruby中做。 基本上,我必须实现一个简单的状态机(一个字符后视)。 我的代码目前看起来像这样: text.each{ |c| … … … … if @state!=:some_state next end #processing stuff for if in :some_state mode … … … … … } 这是对的吗? 或者它应该像下面这样实现: text.each{ |c| … … … … if @state==:some_state #processing stuff for if in :some_state mode … … … … … end } 有正确的方式还是只是偏好? 哪一个与做事的“ruby方式”更加融合?

模型中的一个或多个参数使用Ruby on Rails查找条件

假设我有“汽车”模型和控制器“汽车”,以及方法“显示”。 我有多个属性,如: in_production , year , make 我可以轻松地做这样的事情来找到符合所有传递参数的汽车: def display @cars = Car.find(:all, :conditions => { :in_production => #{params[:in_production]}, :year => #{params[:year]}, :make => #{params[:make]} })` end 所以我正在做的是在菜单中编写硬链接,所以如果我想找到2009年生产的所有日产汽车,我会将这些值作为参数传递给我的链接。 在另一页上,我想展示2009年的每辆车都是in_production,只有两辆车而不是三辆车。 什么是动态改变条件的最佳方法,以便它可以使用一个,两个或三个参数,同时使用相同的动作? 有任何想法吗?

Git bash chcp windows7编码问题

伙计我如何在Git bash命令屏幕上更改编码? 我正在使用Windows 7,当我尝试安装任何Ruby gem时,我通常会遇到这个问题 $ gem install libv8 — –with-system-v8 ERROR: While executing gem … (ArgumentError) unknown encoding name – CP720 所以当我尝试使用命令chcp 1252它会给我错误 $ chcp 1252 sh.exe”: chcp: command not found 那我怎么能改变git bash命令屏幕上的编码?

试图解密来自Java的attr_encrypted存储值

我有一个rails应用程序,在其中一个模型中加密(使用attr_encrypted)2个字段。 我的流程的另一部分,不是Web应用程序需要使用此数据执行某些任务(明文)。 我正在尝试从数据库中读取存储的值并解密它们但不能…… 我的模型看起来像这样: class SecretData mysecret, :algorithm => “aes-256-cbc” attr_encrypted :data2, :key=>mysecret, :algorithm => “aes-256-cbc” … end 数据库字段(encrypted_data1和encrypted_data2)充满了数据但是当我尝试解码base64(attr_encrypted默认情况下这样做)并解密时(我尝试使用命令行中的openssl并使用Java)我得到了“恶魔数”(openssl)或关于密钥长度的各种错误(在Java中)。 我花了很多时间试图解密这些字符串但却找不到方法。 这是我拥有的所有数据: encrypted + base64字符串(对于data1和data2)是: cyE3jDkKc99GVB8TiUlBxQ== sqcbOnBTl6yy3wwjkl0qhA== 我可以从它们中解码base64并得到一些字节数组。 当我尝试: echo cyE3jDkKc99GVB8TiUlBxQ== | openssl aes-256-cbc -a -d (and type “mylittlesecret” as the password) 我得到:“恶魔号” 当我尝试以下Java代码时: Key key = generateKey(); Cipher c = Cipher.getInstance(ALGO); c.init(Cipher.DECRYPT_MODE, key); byte[] decordedValue […]

Ruby:布尔正则表达式方法的正确语法是什么?

检查模式的字符串的方法的正确语法是什么,如果正则表达式匹配,则返回true或false? 基本理念: def has_regex?(string) pattern = /something/i return string =~ pattern end 使用案例: if has_regex?(“something”) # woohoo else # nothing found: panic! end

修复“ruby安装缺少心理”错误?

我正在运行Ruby ruby​​ 1.9.3p125并且我不断收到此错误,这使我无法在Rails中进行任何类型的开发。 看来你的ruby安装缺少心理(对于YAML输出)。 要消除此警告,请安装libyaml并重新安装ruby。 我用谷歌搜索过,看似似乎一切,但似乎没有任何工作。 我真的很想开始一些新的项目,但似乎无法绕过这个障碍。 任何帮助是极大的赞赏!

如何通过API从Hipchat获取房间的所有消息历史记录?

我今天稍微使用了Hipchat API (v2)并遇到了一个奇怪的问题,我无法真正提取房间的所有历史记录。 例如,当我查询特定日期时,它似乎只能检索给定日期的一小部分历史记录。 我曾计划简单地遍历房间的所有日期,以我可以使用的格式提取历史记录,但最终达到了这个目标,现在我不确定是否真的可以完全取出历史记录。 我意识到这有点笨重。 它将JSON拉成一个字符串,然后我必须将其形成一个哈希值,所以我知道我没有做到这么好,但是这很大程度上我只是为了测试history方法对于API: api_token = “MY_TOKEN” client = HipChat::Client.new(api_token, :api_version => ‘v2’) history = client[‘ROOM_NAME’].history history = JSON.parse(history) history.each do |key, history| if history.is_a? Array history.each do |message| if message.is_a? Hash puts “#{message[‘from’][‘name’]}: #{message[‘message’]}” end end end end 显然,对此的扩展只是诅咒所需范围内的日期(使用: client[‘ROOM_NAME’].history(:date => ‘2010-11-19’, :timezone => ‘PST’) ) ,但同样,我只得到了房间历史的一小部分。 我是否缺少一些额外的参数,以使其按预期工作?

从Sinatra访问标头

我试图访问sinatrafilter中的标头。 我的请求包括标题“HTTP_AUTH”,但我无法访问它。 我的filter是 before do halt 403 unless request[‘HTTP_AUTH’] == ‘test’ end 它在我的机架测试中正常工作。 browser.get ‘/mypath’, “CONTENT_TYPE” => “application/json”, “HTTP_AUTH” => ‘test’ 但是当我从其他来源尝试时,我无法访问它。 如果我puts request.env我可以看到令牌在请求中,但我无法访问它。 “HTTP_CONNECTION”=>”close”, “HTTP_AUTH”=>”test”, “HTTP_ACCEPT”=>”application/json”, 我究竟做错了什么?

为什么带有字符串数组的ruby并行赋值返回字符串

我不确定下面的代码片段到底发生了什么。 >> a, b = [“ho”, “hey”] => [“ho”, “hey”] >> a => “ho” >> b => “hey” >> c, d = “foo”, “bar” => [“foo”, “bar”] >> c => “foo” >> d => “bar” >> a, b = [“blerg”], [“baz”] => [[“blerg”], [“baz”]] >> a => [“blerg”] >> b => [“baz”] 为什么第1行不会返回a => [“ho”] […]

设计,Omniauth和Twitter

我正在开发一个使用devise和omniauth的Rails 3应用程序,并按照https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview中给出的示例进行操作,它适用于Facebook帐户,但是当我尝试添加Twitter auth,我收到了’401 Unauthorized’回复。 为了跟踪问题,我将api.twitter.com的URL切换为http并转储网络流量,看起来它是两次POST到/ oauth / access_token。 我第一次得到200响应,第二次得到401.在它之间使用’GET /1/account/verify_credentials.json’方法成功获取经过身份validation的用户的用户信息。 我不明白为什么代码第二次调用access_token方法。 在我的config / initializers / devise.rb文件中,我添加了: config.omniauth :twitter, “consumer_key”, “consumer_secret” 除了上面的Omniauth概述页面中列出的其余代码。 我还在我的OmniauthCallbacksController中添加了一个’twitter’方法,但由于401,它永远不会被调用。 任何帮助将非常感激。