小编And*_*imm的帖子

Ruby中没有命名参数?

这很简单,我不敢相信它抓住了我.

def meth(id, options = "options", scope = "scope")
  puts options
end

meth(1, scope = "meh")

-> "meh"
Run Code Online (Sandbox Code Playgroud)

我倾向于使用哈希作为参数选项,因为它是牧群的做法 - 它非常干净.我认为这是标准.今天,经过大约3个小时的寻找bug之后,我追踪到了一个错误,我碰巧正在使用这个假设命名参数将被尊重.他们不是.

所以,我的问题是:在Ruby(1.9.3)中,命名参数是否正式不受尊重,或者这是我缺少的一个副作用?如果他们不是,为什么不呢?

ruby parameters named-parameters

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

在Ruby中,您可以对从文件读取的数据执行字符串插值吗?

在Ruby中,您可以引用字符串中的变量,并在运行时进行插值.

例如,如果声明一个变量fooequals "Ted"并声明一个"Hello, #{foo}"它插入的字符串"Hello, Ted".

我无法弄清楚如何对"#{}"从文件读取的数据执行魔术插值.

在伪代码中,它可能看起来像这样:

interpolated_string = File.new('myfile.txt').read.interpolate
Run Code Online (Sandbox Code Playgroud)

但是最后interpolate一种方法不存在.

ruby string interpolation

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

Ruby:Proc.new {'waffles'} vs proc {'waffles'}

在Ruby中,Proc.new { 'waffles' }和之间有什么区别proc { 'waffles' }吗?我发现很少提到第二种语法.

从测试使用irb,我没有发现任何明显的差异.第一个是第二个语法糖吗?

ruby syntax proc-object

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

在ruby中访问嵌套哈希的元素

我正在使用ruby编写的一个小实用程序,它广泛使用嵌套哈希.目前,我正在检查对嵌套哈希元素的访问,如下所示:

structure = { :a => { :b => 'foo' }}

# I want structure[:a][:b]

value = nil

if structure.has_key?(:a) && structure[:a].has_key?(:b) then
  value = structure[:a][:b]
end
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?我想能够说:

value = structure[:a][:b]
Run Code Online (Sandbox Code Playgroud)

而得到nil,如果:一个是不是一个关键structure,等等.

ruby hash hash-of-hashes

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

如何使用Ruby测试/单元执行单个测试?

而不是自动运行所有测试用例,有没有办法在ruby测试/单元框架下执行单个测试.我知道我可以通过使用Rake实现这一目标,但我现在还没准备好转向rake.

ruby unit_test.rb  #this will run all the test case
ruby unit_test.rb test1 #this will only run test1
Run Code Online (Sandbox Code Playgroud)

ruby testing unit-testing testunit

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

为什么Ruby open-uri打开在我的单元测试中返回一个StringIO,但在我的控制器中是一个FileIO?

我继承了一个Rails 2.2.2应用程序,用于在Amazon S3上存储用户上传的图像.基于attachment_fu的Photo模型提供了一种rotate方法,用于open-uri从S3和MiniMagick中检索图像以执行旋转.

rotate方法包含此行以检索用于MiniMagick的图像:

temp_image = MiniMagick::Image.from_file(open(self.public_filename).path)
Run Code Online (Sandbox Code Playgroud)

self.public_filename 返回类似的东西

http://s3.amazonaws.com/bucketname/photos/98/photo.jpg
Run Code Online (Sandbox Code Playgroud)

检索图像并旋转它在生产和开发中正在运行的应用程序中工作正常.但是,单元测试失败了

TypeError: can't convert nil into String
    /Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `initialize'
    /Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `open'
    /Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `from_file'
Run Code Online (Sandbox Code Playgroud)

原因是当在单元测试的上下文中调用模型方法时,open(self.public_filename)返回StringIO包含图像数据的对象.path此对象上的方法返回nilMiniMagick::Image.from_file爆炸.

当从该调用这个相同的模型方法时PhotosController,open(self.public_filename)返回FileIO绑定到例如名为的文件的实例,/tmp/open-uri7378-0并且该文件包含图像数据.

考虑原因必须是测试和开发之间的一些环境差异,我在开发环境下启动了控制台.但正如在单元测试中,open('http://...')返回一个StringIO,而不是一个FileIO.

我已经通过open-uri和所有相关的应用程序特定代码进行了跟踪,并且没有找到差异的理由.

ruby open-uri ruby-on-rails imagemagick amazon-s3

30
推荐指数
2
解决办法
8478
查看次数

Ruby:如何将多个方法调用与"send"链接在一起

必须有一种内置的方式来做到这一点,对吧?

class Object
  def send_chain(arr)
    o=self
    arr.each{|a| o=o.send(a) }
    return o
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming

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

Ruby/Rails - 从我的应用程序中删除ActiveAdmin

我很愉快地在Active Admin中使用我的应用程序中的管理框架. http://activeadmin.info/

当我安装它时,我跑了

rails g active_admin:install
rake db:migrate
rails g active_admin:resource product
Run Code Online (Sandbox Code Playgroud)

它在我的应用程序中生成了很多迁移和代码.

我的问题是,如果我想回去并将active_admin中的所有内容都放入我的应用程序中,我该怎么做?

是否有一个'rails active_admin:uninstall'命令来摆脱一切,或者我是否必须手动创建迁移以删除所有表并搜索我的代码以查看它添加了什么?

rubygems ruby-on-rails ruby-on-rails-3 activeadmin

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

在Ruby中将嵌套的哈希键从CamelCase转换为snake_case

我正在尝试构建一个API包装器gem,并且在将API返回的JSON转换为更多Rubyish格式时遇到问题.

JSON包含多层嵌套,包括哈希和数组.我想要做的是递归地将所有键转换为snake_case以便于使用.

这是我到目前为止所得到的:

def convert_hash_keys(value)
  return value if (not value.is_a?(Array) and not value.is_a?(Hash))
  result = value.inject({}) do |new, (key, value)|
    new[to_snake_case(key.to_s).to_sym] = convert_hash_keys(value)
    new
  end
  result
end
Run Code Online (Sandbox Code Playgroud)

上面调用此方法将字符串转换为snake_case:

def to_snake_case(string)
  string.gsub(/::/, '/').
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
  gsub(/([a-z\d])([A-Z])/,'\1_\2').
  tr("-", "_").
  downcase
end
Run Code Online (Sandbox Code Playgroud)

理想情况下,结果类似于以下内容:

hash = {:HashKey => {:NestedHashKey => [{:Key => "value"}]}}

convert_hash_keys(hash)
# => {:hash_key => {:nested_hash_key => [{:key => "value"}]}}
Run Code Online (Sandbox Code Playgroud)

我得到的递归是错误的,我试过的这种解决方案的每个版本都不会将符号转换为超出第一级别,或者过度使用并尝试转换整个哈希值,包括值.

尝试在辅助类中解决所有这些问题,而不是修改实际的Hash和String函数(如果可能).

先感谢您.

ruby hash camelcasing key hash-of-hashes

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

已知更新RVM列表

是否可以在rvm list known不升级整个rvm的情况下更新已知红宝石(你得到的)列表?

ruby rvm

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