标签: ruby

将ruby hash .default设置为列表

我以为我理解默认方法对哈希的作用...

如果密钥不存在,请为其提供默认值:

irb(main):001:0> a = {}
=> {}
irb(main):002:0> a.default = 4
=> 4
irb(main):003:0> a[8]
=> 4
irb(main):004:0> a[9] += 1
=> 5
irb(main):005:0> a
=> {9=>5}
Run Code Online (Sandbox Code Playgroud)

都好.

但是,如果我设置的默认是一个空列表,或空哈希,我不知道这是在行为 ....

irb(main):001:0> a = {}
=> {}
irb(main):002:0> a.default = []
=> []
irb(main):003:0> a[8] << 9
=> [9]                          # great!
irb(main):004:0> a
=> {}                           # ?! would have expected {8=>[9]}
irb(main):005:0> a[8]
=> [9]                          # awesome!
irb(main):006:0> a[9]
=> [9]                          # unawesome! shouldn't this be [] ??
Run Code Online (Sandbox Code Playgroud)

我希望/期待相同的行为,好像我使用了|| …

ruby hashmap

40
推荐指数
6
解决办法
1万
查看次数

ActiveRecord查找以.开头

非常简单的问题 - 我如何进行搜索以查找名称以ActiveRecord中的某个字符串开头的所有记录.我已经在互联网上看到了各种各样的比特,其中使用了逐字的LIKE SQL子句 - 但是从我所听到的那些不是'正确'的方式.

有没有'正确'的Rails方式?

ruby activerecord ruby-on-rails

40
推荐指数
5
解决办法
3万
查看次数

如何避免在读取文件时跳过UTF-8 BOM

我正在使用最近添加了Unicode BOM头(U + FEFF)的数据源,而我的rake任务现在被它搞砸了.

我可以跳过前3个字节,file.gets[3..-1]但有没有更优雅的方式来读取Ruby中的文件,无论BOM是否存在,都能正确处理?

ruby unicode byte-order-mark file

40
推荐指数
2
解决办法
2万
查看次数

如何在Rails 1.2.3中将复选框默认为"选中"?

如何在最初显示时将复选框默认为"选中"?

我没有找到一个"Rails"方式来做这个(有效)所以我用JavaScript做到了.在Rails中有没有正确的方法呢?我正在使用Rails 1.2.3.

ruby ruby-on-rails

40
推荐指数
5
解决办法
5万
查看次数

在文件中搜索字符串的最佳方法是什么?

标题真的说明了一切.我只想知道它是否存在,而不是它的存在.是否有一个班轮实现这一目标?

ruby

40
推荐指数
3
解决办法
5万
查看次数

Ruby语法

我正在寻找BNF形式的Ruby语法.有正式版吗?

ruby grammar bnf

40
推荐指数
3
解决办法
1万
查看次数

如何在红宝石中上限和舍入数字

我想在Ruby中"封顶"一个数字(在Rails上).

例如,作为函数的结果,我有一个浮点数,但我需要一个int.

我有非常具体的说明,这里有一些例子:

如果我得到1.5我想2但如果我得到2.0我想要2(而不是3)

number.round(0) + 1不行.

我可以编写一个函数来执行此操作,但我确信已经存在.

但是,如果它不存在,我应该在哪里创建我的上限函数?

ruby ruby-on-rails

40
推荐指数
4
解决办法
4万
查看次数

我是否必须手动卸载所有依赖宝石?

我尝试使用该命令卸载datamapper gem uninstall dm-core.

但似乎还需要卸载一大堆依赖宝石.

C:\>gem uninstall dm-core

You have requested to uninstall the gem:
        dm-core-0.9.11
dm-migrations-0.9.11 depends on [dm-core (= 0.9.11)]
dm-cli-0.9.11 depends on [dm-core (= 0.9.11)]
dm-serializer-0.9.11 depends on [dm-core (= 0.9.11)]
dm-timestamps-0.9.11 depends on [dm-core (= 0.9.11)]
dm-aggregates-0.9.11 depends on [dm-core (= 0.9.11)]
dm-types-0.9.11 depends on [dm-core (= 0.9.11)]
dm-is-tree-0.9.11 depends on [dm-core (= 0.9.11)]
dm-observer-0.9.11 depends on [dm-core (= 0.9.11)]
dm-validations-0.9.11 depends on [dm-core (= 0.9.11)]
If you remove this gems, one or more dependencies …
Run Code Online (Sandbox Code Playgroud)

ruby dependencies rubygems ruby-on-rails

40
推荐指数
6
解决办法
3万
查看次数

使用oauth和twitter ruby​​ gems时,请继续获取OAuth :: Unauthorized错误

我正在使用ruby twitter gem和oauth来访问用户的Twitter帐户.在我的代码中,我有:

unless @user.twitter_authd?
      oauth = Twitter::OAuth.new('token', 'secret')
      session[:twitter_request_token] = oauth.request_token.token
      session[:twitter_request_secret] = oauth.request_token.secret
      @twitter_auth_url = oauth.request_token.authorize_url
    end
Run Code Online (Sandbox Code Playgroud)

其中令牌和秘密已插入我的实际令牌和秘密.当我点击@twitter_auth_url的链接时,我被带到twitter并要求授予访问权限.我点击允许,然后叽叽喳喳重定向我到我的回调URL http://www.mydomain.com/twitter_callback/?oauth_token=fmy2aMvnjVgaFrz37bJ4JuB8r5xN79gsgDQRG4BNY然后点击下面的代码:

oauth = Twitter::OAuth.new('token', 'secret')

    logger.info("session[:twitter_request_token] = #{session[:twitter_request_token]}")
    logger.info("session[:twitter_request_secret] = #{session[:twitter_request_secret]}")

    oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])
    session[:twitter_request_token] = nil
    session[:twitter_request_secret] = nil

    @user.update_attributes({
      :twitter_token => oauth.access_token.token, 
      :twitter_secret => oauth.access_token.secret,
    })

    redirect_to root_path
Run Code Online (Sandbox Code Playgroud)

Twitter请求令牌和秘密设置得很好.但是我最终得到了授权错误:

 OAuth::Unauthorized in MainController#twitter_callback

401 Unauthorized

RAILS_ROOT: /Users/TAmoyal/Desktop/RoR_Projects/mls
Application Trace | Framework Trace | Full Trace

/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/consumer.rb:167:in `token_request'
/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/tokens/request_token.rb:14:in `get_access_token'
/Library/Ruby/Gems/1.8/gems/erwaller-twitter-0.6.13.1/lib/twitter/oauth.rb:29:in `authorize_from_request'
/Users/TAmoyal/Desktop/RoR_Projects/mls/app/controllers/main_controller.rb:70:in `twitter_callback'
Run Code Online (Sandbox Code Playgroud)

代码在此行失败:

oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])
Run Code Online (Sandbox Code Playgroud)

当它试图获得访问令牌时.您可以在此处查看authorize_from_request的源代码.我不确定为什么会这样.有人有想法吗?

ruby twitter ruby-on-rails oauth

40
推荐指数
5
解决办法
4万
查看次数

将整个文本文件作为单个字符串读取的合理方法是什么?

我相信这很容易; 我无法立即从谷歌找到答案.

我知道我能做到这一点(对吗?):

text = ""
File.open(path).each_line do |line|
    text += line
end

# Do something with text
Run Code Online (Sandbox Code Playgroud)

但那似乎有点过分,不是吗?或者这是人们在Ruby中做到的方式?

ruby string io file

40
推荐指数
2
解决办法
3万
查看次数