小编Bry*_*cke的帖子

最简洁的方法来测试Ruby字符串或符号的字符串相等(不是对象相等)?

我总是这样做来测试Ruby中的字符串相等性:

if mystring.eql?(yourstring)
 puts "same"
else
 puts "different"
end
Run Code Online (Sandbox Code Playgroud)

这是在没有测试对象相等性的情况下执行此操作的正确方法吗?

我正在寻找最简洁的方法来根据内容测试字符串.

用括号和问号,这看起来有点笨重.

ruby

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

在多个模型中放置常见代码的位置?

我有两个包含相同方法的模型:

def foo
  # do something
end
Run Code Online (Sandbox Code Playgroud)

我应该把它放在哪里?

我知道常用代码在Rails应用程序的lib目录中.

但是如果我把它放在一个lib名为' Foo' 的新类中,并且我需要将它的功能添加到我的两个中ActiveRecord models,我是这样做的:

class A < ActiveRecord::Base
includes Foo

class B < ActiveRecord::Base
includes Foo
Run Code Online (Sandbox Code Playgroud)

然后这两个AB将包含foo就像我在每个定义的方法就可以了?

ruby ruby-on-rails mixins

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

Ruby模块是否等同于Java接口?

据我所知,接口是Java旨在通过为实现接口填充的类布置方法来强制执行设计.这也是Ruby模块的想法吗?我看到,就像Java中的Interfaces一样,你无法在Ruby中实例化一个模块.

ruby java module interface

20
推荐指数
2
解决办法
7940
查看次数

为什么需要":nodoc:"语法?

似乎很多库/插件都使用这种语法:

  def self.included(base) # :nodoc:
    base.extend ClassMethods
  end
Run Code Online (Sandbox Code Playgroud)

为什么这个:nodoc:部分是必要的?

ruby rdoc

18
推荐指数
1
解决办法
4644
查看次数

继续在下一行发表声明并发表评论

如果我在Ruby中有一个声明我想继续下一行,通常我会在行的末尾添加一个反斜杠,如下所示:

print x \
+ y
Run Code Online (Sandbox Code Playgroud)

但如果我对该行有评论,它就不起作用:

print x #show x 
+ y # show y
Run Code Online (Sandbox Code Playgroud)

有没有解决的办法?

(编辑:Squeegy的解决方案是正确的,实际上,我知道你可以做到这一点,但我特别想知道是否有一种方法可以在与反斜杠相同的行上发表评论).

ruby continuations newline ruby-on-rails

14
推荐指数
1
解决办法
9977
查看次数

使用基类和基本模块重构ActiveRecord模型

A类和B类相同:

class A < ActiveRecord::Base
 def foo
  puts "foo"
 end
end

class B < ActiveRecord::Base
 def foo
  puts "foo"
 end
end
Run Code Online (Sandbox Code Playgroud)

像这样重构与基类之间有什么区别:

class Base < ActiveRecord::Base
 def foo
  puts "foo"
 end
end

class A < Base
end

class B < Base
end
Run Code Online (Sandbox Code Playgroud)

与使用基本模块的情况相比:

module Base
 def foo
  puts "foo"
 end
end

class A < ActiveRecord::Base
 include Base
end

class B < ActiveRecord::Base
 include Base
end
Run Code Online (Sandbox Code Playgroud)

有一种方式优于另一种方式吗?

ruby inheritance activerecord ruby-on-rails mixins

13
推荐指数
2
解决办法
5000
查看次数

base.extend与base.class_eval扩展

这种语法在功能上是否等效

  def self.included(base)
    base.class_eval do
      extend ClassMethods
    end
  end
Run Code Online (Sandbox Code Playgroud)

这个?

  def self.included(base)
    base.extend ClassMethods
  end
Run Code Online (Sandbox Code Playgroud)

ruby

9
推荐指数
1
解决办法
3273
查看次数

在irb中找不到宝石:"NameError:来自(irb)的未初始化的常量Gem"

当我运行Rails应用程序时,它会正确找到我安装的所有宝石.

这是我第一次尝试从irb内部调用一些宝石而无法找到它们.

blocke:~$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'rails'
LoadError: no such file to load -- rails
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 from (irb):2
irb(main):003:0> 
Run Code Online (Sandbox Code Playgroud)

当我运行"宝石环境"时,这就是我得到的:

blocke:~$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.5
  - RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.8
     - /home/blocke/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems ruby-on-rails irb

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

如何在MS-DOS脚本中打印换行符?

我想在MS-DOS中打印程序的输出,所以我写了一个.bat文件,上面写着:

cls
ruby foo.rb
Run Code Online (Sandbox Code Playgroud)

但输出 - 因为它出现在我的命令提示符 - 看起来像这样:

c:\workspace>ruby foo.rb
foo output
c:\workspace>
Run Code Online (Sandbox Code Playgroud)

我想插入一个新行到使用MS-DOS的输出,因为我不想亵渎我的Ruby代码与任何不相关的代码的作用应该做的事情.

MS-DOS中看起来像我想要的唯一命令是'type'和'print',但它们都用于打印文件.

我尝试使用两个空行创建一个文本文件,并使用'type'命令输出它,但它看起来很乱.

任何想法,将不胜感激.

formatting newline dos batch-file

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

通过运行“gemsources-c”我实际上删除了什么?

我运行了“ gem sources -c”,这样我就必须特意指定要从哪里安装 gem,因为我现在有 3 个不同的 gem 安装源 - RubyForge、Github 和 Gemcutter。

C:\>gem sources -c
*** Removed specs cache ***
*** Removed user source cache ***
*** Removed latest user source cache ***
*** Removed system source cache ***
*** Removed latest system source cache ***
Run Code Online (Sandbox Code Playgroud)

运行此命令后,我再次运行gem sources以确保我不再有任何默认源,我得到以下信息:

C:\>gem sources
*** CURRENT SOURCES ***

http://gems.rubyforge.org
http://gems.github.com
http://gems.rubyforge.org/
http://gemcutter.org
Run Code Online (Sandbox Code Playgroud)

换句话说,一切都没有改变

查看gem sources -c下面的帮助,这似乎是一次删除所有宝石源的正确命令:

    -c, --clear-all                  Remove all sources (clear the cache)
Run Code Online (Sandbox Code Playgroud)

不然的话,看来你得把它们一一删除了。没什么大不了的,因为我只有 …

ruby rubygems

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

将彩色sytax代码片段添加到网页的最佳方法是什么?

是否有网络小工具或服务或一些开源解决方案来执行此操作?

或者人们只是在HTML中手动编码?

我需要在网页上添加一些Ruby和Python代码.

html syntax-highlighting web

4
推荐指数
1
解决办法
3486
查看次数

将acts_as_taggable移动到包含的模块时出错

如果我写这个,一切正常:

class A < ActiveRecord::Base
acts_as_taggable
end
Run Code Online (Sandbox Code Playgroud)

但是,如果我acts_as_taggable把它放入A类包含的模块中,我会收到一个错误:

module B
  def self.included(base)
    base.class_eval do
      extend ClassMethods
      include InstanceMethods
    end
  end

  module ClassMethods
    acts_as_taggable
  end

  module InstanceMethods
  end
end

class A < ActiveRecord::Base
include B
Run Code Online (Sandbox Code Playgroud)

上面代码中的错误是:

undefined local variable or method `acts_as_taggable' for C::ClassMethods:Module
Run Code Online (Sandbox Code Playgroud)

acts_as_taggable从附带的模块打电话不正确吗?

它是否需要在类定义中?

ruby activerecord ruby-on-rails

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

Ruby中$ undefined和$ end引用了什么?

我使用反斜杠继续下一行的Ruby语句.

print abc \
+ def
Run Code Online (Sandbox Code Playgroud)

我在反斜杠之后添加了一个空格,因为我喜欢把事情搞砸了,果然,我收到了一个错误:

意外的$ undefined,期待$ end

我假设$ undefined是一个全局变量,这意味着编译器看到它无法识别的任何东西 - 在这种情况下是反斜杠之后的空格.

$ end是一个引用"行尾"字符的全局变量吗?

这些全局变量在我的程序中是全局的还是比它更全局?它们的全球性如何?

ruby ruby-on-rails undefined

1
推荐指数
1
解决办法
1261
查看次数