我以为我理解默认方法对哈希的作用...
如果密钥不存在,请为其提供默认值:
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)
我希望/期待相同的行为,好像我使用了|| …
非常简单的问题 - 我如何进行搜索以查找名称以ActiveRecord中的某个字符串开头的所有记录.我已经在互联网上看到了各种各样的比特,其中使用了逐字的LIKE SQL子句 - 但是从我所听到的那些不是'正确'的方式.
有没有'正确'的Rails方式?
我正在使用最近添加了Unicode BOM头(U + FEFF)的数据源,而我的rake任务现在被它搞砸了.
我可以跳过前3个字节,file.gets[3..-1]但有没有更优雅的方式来读取Ruby中的文件,无论BOM是否存在,都能正确处理?
如何在最初显示时将复选框默认为"选中"?
我没有找到一个"Rails"方式来做这个(有效)所以我用JavaScript做到了.在Rails中有没有正确的方法呢?我正在使用Rails 1.2.3.
我想在Ruby中"封顶"一个数字(在Rails上).
例如,作为函数的结果,我有一个浮点数,但我需要一个int.
我有非常具体的说明,这里有一些例子:
如果我得到1.5我想2但如果我得到2.0我想要2(而不是3)
做number.round(0) + 1不行.
我可以编写一个函数来执行此操作,但我确信已经存在.
但是,如果它不存在,我应该在哪里创建我的上限函数?
我尝试使用该命令卸载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 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的源代码.我不确定为什么会这样.有人有想法吗?
我相信这很容易; 我无法立即从谷歌找到答案.
我知道我能做到这一点(对吗?):
text = ""
File.open(path).each_line do |line|
text += line
end
# Do something with text
Run Code Online (Sandbox Code Playgroud)
但那似乎有点过分,不是吗?或者这是人们在Ruby中做到的方式?