我在Ruby中有一个字符串,我正在调用strip方法来删除前导和尾随空格.例如
s = "12345 "
s.strip
Run Code Online (Sandbox Code Playgroud)
但是,如果字符串为空,我会收到以下错误.
NoMethodError:nil的未定义方法`strip':NilClass
我正在使用Ruby 1.9,那么在调用strip方法之前,最简单的方法是检查值是否为nil?
更新:
我在数组中的元素上尝试了这个但是遇到了同样的问题:
data[2][1][6].nil? ? data[2][1][6] : data[2][1][6].split(":")[1].strip
Run Code Online (Sandbox Code Playgroud) 在Ruby中,是否有一种方法可以"覆盖"子类中的常量,从而从子类调用继承的方法会导致该方法使用新常量而不是旧常量?例如:
class SuperClass
CONST = "Hello, world!"
def self.say_hello
CONST
end
end
class SubClass < SuperClass
override_const :CONST, "Hello, Bob!"
end
SuperClass.say_hello # => "Hello, world!"
SubClass.say_hello # => "Hello, Bob!"
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有办法做这样的事情呢?
class SuperClass
CONST = "Hello, world!"
def self.say_hello
CONST
end
end
SubClass = SuperClass.clone
SubClass.send(:remove_const, :CONST)
SubClass.const_set(:CONST, "Hello, Bob!")
SubClass.say_hello # => "Hello, Bob!"
Run Code Online (Sandbox Code Playgroud)
注意:我在irb中尝试了我的第二个例子,它似乎工作,除了在克隆类之后类方法似乎无法访问CONST:
irb(main):012:0> SubClass.say_hello
NameError: uninitialized constant Class::CONST
from (irb):4:in `say_hello'
from (irb):12
from C:/Ruby193/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud) RSpec期望改变:
it "should increment the count" do
expect{Foo.bar}.to change{Counter.count}.by 1
end
Run Code Online (Sandbox Code Playgroud)
有没有办法预期两个表的变化?
expect{Foo.bar}.to change{Counter.count}.by 1
and change{AnotherCounter.count}.by 1
Run Code Online (Sandbox Code Playgroud) 我在部署rails应用程序时遇到了问题.我在AWS博客上创建了一个类似于示例的钩子http://ruby.awsblog.com/post/Tx2AK2MFX0QHRIO/Deploying-Ruby-Applications-to-AWS-Elastic- Beanstalk-with-Git喜欢:
packages:
yum:
git: []
Run Code Online (Sandbox Code Playgroud)
即使我运行一个捆绑包来创建供应商/缓存以获得所有宝石......并且仍然得到:git://github.com/refinery/refinerycms-search.git(在2-0-stable)未被检查出.请运行bundle install(Bundler :: GitError)
任何帮助都会很好,我们会尝试将所有应用程序移至EB.但是认为git没有安装或正在发生什么......我需要在它创建的EB ec2实例上使用git.
堆栈跟踪:
Error message:
git://github.com/refinery/refinerycms-search.git (at 2-0-stable) is not checked out. Please run `bundle install` (Bundler::GitError)
Exception class:
PhusionPassenger::UnknownError
Application root:
/var/app/current
Backtrace:
# File Line Location
0 /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 801 in `rescue in load_spec_files'
1 /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 799 in `load_spec_files'
2 /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 381 in `local_specs'
3 /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb 774 in `specs'
4 /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 174 in `block in resolve'
5 /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 172 in `each'
6 /usr/share/ruby/1.9/gems/1.9.1/gems/bundler-1.2.1/lib/bundler/definition.rb 172 in …Run Code Online (Sandbox Code Playgroud) ruby ruby-on-rails amazon-ec2 amazon-web-services amazon-elastic-beanstalk
我有两个哈希......
a = {:a => 5}
b = {:b => 10}
Run Code Online (Sandbox Code Playgroud)
我想要...
c = {:a => 5,:b => 10}
Run Code Online (Sandbox Code Playgroud)
如何创建哈希c?
定义respond_to_missing?与定义相反的重点是什么respond_to??如果重新定义respond_to?某些课程会出现什么问题?
如何从弹性搜索中获得所有结果,因为结果仅显示限制为10.我有一个像这样的查询:
@data = Athlete.search :load => true do
size 15
query do
boolean do
must { string q, {:fields => ["name", "other_names", "nickname", "short_name"], :phrase_slop => 5} }
unless conditions.blank?
conditions.each do |condition|
must { eval(condition) }
end
end
unless excludes.blank?
excludes.each do |exclude|
must_not { eval(exclude) }
end
end
end
end
sort do
by '_score', "desc"
end
end
Run Code Online (Sandbox Code Playgroud)
我已将限制设置为15,但我不想让它无限制,以便我可以获得所有数据,我无法设置限制,因为我的数据不断变化,我想获得所有数据.
我无法获得任何日志输出delayed_job,我不确定我的工作是否正在开始.
这是我的Procfile:
web: bundle exec rails server
worker: bundle exec rake jobs:work
worker: bundle exec clockwork app/clock.rb
Run Code Online (Sandbox Code Playgroud)
这是工作:
class ScanningJob
def perform
logger.info "logging from delayed_job"
end
def after(job)
Rails.logger.info "logging from after delayed_job"
end
end
Run Code Online (Sandbox Code Playgroud)
我看到发条输出到系统输出,我可以看到工作程序执行器启动,但我从未看到我的日志语句命中.我也试过puts无济于事.
我的时钟文件非常简单:
every(3.seconds, 'refreshlistings') { Delayed::Job.enqueue ScanningJob.new }
Run Code Online (Sandbox Code Playgroud)
我只是想看到这个工作,缺乏记录意味着我不能.这里发生了什么?
这个Ruby 2.0代码有什么问题?
p (1..8).collect{|denom|
(1...denom).collect{|num|
r = Rational(num, denom)
if r > Rational(1, 3) and r < Rational(1, 2)
return 1
else
return 0
end
}
}.flatten
Run Code Online (Sandbox Code Playgroud)
错误在于block (2 levels) in <main>': unexpected return (LocalJumpError).我想创建一个包含n个(和其余的零)的平面列表,其中n是有理数的数,其中分母低于8,介于1/3和1/2之间.(这是项目欧拉问题).所以我试图从内部块返回.
这样做时我收到以下错误 bundle install
Make sure that `gem install couchbase -v '1.3.3'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)
现在,我没有把这个宝石包括在内Gemfile,所以它来自一些依赖.我怎么能弄清楚哪个宝石依赖于这个沙发基础宝石?
因为bundle install失败了,我不必Gemfile.lock弄清楚这种依赖性.