标签: ruby

Ruby在调用方法之前检查是否为nil

我在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 null

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

在Ruby中,有没有办法在子类中"覆盖"常量,以便继承的方法使用新常量而不是旧常量?

在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)

ruby

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

RSpec是否有可能期望两个表的变化?

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)

ruby rspec

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

Elastic Beanstalk Ruby/Rails需要安装git,所以bundle install工作..但不是

我在部署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

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

如何在ruby中将一个哈希与另一个哈希相结合

我有两个哈希......

a = {:a => 5}
b = {:b => 10}
Run Code Online (Sandbox Code Playgroud)

我想要...

c = {:a => 5,:b => 10}
Run Code Online (Sandbox Code Playgroud)

如何创建哈希c?

ruby hashmap

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

`respond_to?`与`respond_to_missing?`

定义respond_to_missing?与定义相反的重点是什么respond_to??如果重新定义respond_to?某些课程会出现什么问题?

ruby metaprogramming

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

将弹性搜索限制设置为"无限制"

如何从弹性搜索中获得所有结果,因为结果仅显示限制为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,但我不想让它无限制,以便我可以获得所有数据,我无法设置限制,因为我的数据不断变化,我想获得所有数据.

ruby elasticsearch

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

登录delayed_job?

我无法获得任何日志输出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 logging ruby-on-rails delayed-job clockwork

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

意外返回(LocalJumpError)

这个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之间.(这是项目欧拉问题).所以我试图从内部块返回.

ruby ruby-2.0

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

如何从Gemfile中查看依赖树?

这样做时我收到以下错误 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弄清楚这种依赖性.

ruby gem bundler

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