我正在使用Ruby 1.9.2-p290并发现:
a = Array.new(2, []).each {|i| i.push("a")}
=> [["a", "a"], ["a", "a"]]
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的.但是下面的构造函数样式确实做了我所期望的:
b = Array.new(2) {Array.new}.each {|i| i.push("b")}
=> [["b"], ["b"]]
Run Code Online (Sandbox Code Playgroud)
第一个例子是预期的行为吗?
在ruby-doc中,看起来我size=2的参数对于两个构造函数都是相同的参数.我认为如果该each方法传递了该参数,它将以相同的方式为两个构造函数使用它.
剧透:这是rspec-rails宝石的过时版本!
在将我的 sqlite3 gem 移动到开发块然后运行“rake db:migrate”以确保一切仍然正常后,我遇到了从我的 rails 项目目录发出的任何 rake 命令的错误。Rake 在我系统的其他地方运行良好。但是我在该目录中运行的任何 rake 任务都会为我提供以下带有跟踪的输出:
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rspec-rails-2.0.0.beta.18/lib/rspec/rails/tasks/rspec.rake:3:in `<top (required)>'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rspec-rails-2.0.0.beta.18/lib/rspec-rails.rb:8:in `load'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rspec-rails-2.0.0.beta.18/lib/rspec-rails.rb:8:in `block in <class:Railtie>'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/railtie.rb:183:in `call'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/railtie.rb:183:in `block in load_tasks'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/railtie.rb:183:in `each'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/railtie.rb:183:in `load_tasks'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/engine.rb:396:in `block in load_tasks'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/application/railties.rb:8:in `each'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/application/railties.rb:8:in `all'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/engine.rb:396:in `load_tasks'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/application.rb:103:in `load_tasks'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
/Users/ianyoung/rails/third_app/Rakefile:7:in `<top (required)>'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/bin/rake:19:in `load'
/Users/ianyoung/.rvm/gems/ruby-1.9.2-p290/bin/rake:19:in `<main>' …Run Code Online (Sandbox Code Playgroud) 当这不像我预期的那样工作时,我变得很好奇:
var = "foo"
case var.class
when String
puts "bar"
else
puts "baz"
=> "baz"
Run Code Online (Sandbox Code Playgroud)
我理解case语句正在使用===,但我不明白是什么===.文件说......
Case Equality - 对于Object类,实际上与调用#==相同,但通常由后代重写,以在case语句中提供有意义的语义.
http://ruby-doc.org/core-2.2.3/Object.html#method-i-3D-3D-3D
这是否意味着===在Class(或其中一个模块)中覆盖===Object?我糊涂了.
我从rubygems安装了libv8 gem(大约512M),想知道为什么要花这么长时间。这个...
宝石规格-r libv8
...对宝石的大小我一无所知。然后我看了看文档,看起来宝石创建者可以选择将有关其宝石大小的信息放在rubygems的预定义“可选gemspec属性”之一下。
问:因此,在安装一个远程gem之前,无法可靠地知道它的大小吗?
额外的问题:将宝石大小设为必需的gemspec属性是否不切实际?
ActiveSupport Object使用实例方法扩展blank?:
class Object
def blank?
respond_to?(:empty?) ? !!empty? : !self
end
end
Run Code Online (Sandbox Code Playgroud)
可以!!empty?写成empty?呢?这是一个风格选择,以便它作为返回布尔值的方法轻松读取?或者还有其他什么?
我有一个控制器操作,使用一些Javascript来加载我的页面上的表单.当我提交表单时,它不会创建一个Rails请求对象,而是在我的问题标题中收到错误.
这是加载到DOM后的表单:
<form class="new_alliance" id="new_alliance" action="/alliances" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="?"><input type="hidden" name="authenticity_token" value="4aFNLwGQ5+LubOhZYgTxO+HIMRUpc15JeiWruLMrGWYrurX0Ugk/HLW2I3hMtrrCWzCJVORcNkXbFeJuS61Fxw==">
<input value="downstream_requested" type="hidden" name="alliance[status]" id="alliance_status">
<input value="7" type="hidden" name="alliance[upstream_group_id]" id="alliance_upstream_group_id">
<input value="1" type="hidden" name="alliance[downstream_group_id]" id="alliance_downstream_group_id">
<input type="submit" name="commit" value="Request" data-disable-with="Request">
Run Code Online (Sandbox Code Playgroud)
这是我得到NoMethodError的地方:
actionpack(5.0.0.1)lib/action_controller/metal/params_wrapper.rb(第2行)
def _wrapper_enabled?
return false unless request.has_content_type?
ref = request.content_mime_type.ref
_wrapper_formats.include?(ref) && _wrapper_key && !request.request_parameters[_wrapper_key]
end
Run Code Online (Sandbox Code Playgroud)
请求的值为零.当我查看跟踪时,看起来ActionDispatch正在正确设置我的控制器和操作名称.我正在使用better_errors,并且对于我的请求信息,它说:
#<ActionDispatch::Request::Session:0x7fa11c000ce8 not yet loaded>
Run Code Online (Sandbox Code Playgroud)
我觉得我已经留在了这条路上,所以我有点困惑.我有什么想法可以排除故障吗?
编辑:为每个请求添加完整的错误跟踪.
Started POST "/alliances" for 127.0.0.1 at 2016-10-20 15:43:37 -0700
NoMethodError - undefined method `has_content_type?' for nil:NilClass:
actionpack (5.0.0.1) lib/action_controller/metal/params_wrapper.rb:279:in `_wrapper_enabled?' …Run Code Online (Sandbox Code Playgroud) 我想let通过把它们推入一个模块(或者做一些你可能建议的其他事情)来干掉我的一些共享一些相同表达式的spec文件.当我这样做时,我在运行规范时遇到错误:
用于SpecShared的未定义方法`let':Module(NoMethodError)
我需要rails_helper.rb中的模块
我在我的模块中需要rails_helper.rb
似乎模块要么没有正确地需要rails_helper.rb,要么需要其他东西.还有什么/我需要做才能使这项工作?