小编ber*_*kes的帖子

获取现有Rails错误类的列表以供重用/继承

我经常需要抛出一个自定义(错误)错误.就像由于参数不匹配而无法找到资源时.

我更喜欢抛出现有错误,或抛出从现有错误继承的错误.这样,我不会引入已经定义的错误类,并且可以完美地使用(DRY).但它也允许保持措辞和风格相同,通过继承和简单地改变一两个字来澄清与原始错误的差异.

例如:

Foo.new
Foo.some_external_id = nil
Foo.fetch_external_resource
# => InvalidOptions: Calling Foo#fetch_external_resource with nil is invalid
Run Code Online (Sandbox Code Playgroud)

我很确定已经定义了这样的错误.事实上,在通过多行代码阅读后,我发现我的MongoID驱动程序已经存在Mongoid::Errors::InvalidOptions: Calling Document#find with nil is invalid.

Ruby Core和Ruby on Rails中是否有可用的错误类列表?有没有办法为您当前的项目获得这样的列表?

重新使用和/或继承现有错误是否很聪明,或者我应该维护自己的自定义设置?

error-handling custom-exceptions ruby-on-rails-3

21
推荐指数
3
解决办法
8922
查看次数

PHP相当于Ruby的or-equals(foo || = bar)?

在PHP中,我经常写类似的行

isset($foo)? NULL : $foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

在红宝石中有一个明亮的捷径,叫做或等于

foo ||= 'bar'
Run Code Online (Sandbox Code Playgroud)

PHP有这样的操作符,快捷方式或方法调用吗?我找不到一个,但我可能错过了它.

php ruby operators

20
推荐指数
4
解决办法
9071
查看次数

如何重命名宝石?

我有一个我要重命名的宝石.它发布在RubyGems上.我最担心的是人们想要更新它.

我看到两条路,但是真的想听听那些重命名他们的宝石的人,他们是怎么做到的.

1.将旧的变成元数据包

  • 创建一个新的gem(命名smart-cropper)
  • 添加smart-croppercroptoelie(旧宝石)的依赖
  • 从中删除所有lib,bin和其他代码 croptoelie

我看到的一个问题是,它太透明了,人们可能不会意识到他们使用的宝石不再被维护.

另一个问题是版本控制变得更难:每次我发布一个新版本的renamed(smart-cropper)gem时,我都必须碰到旧版"metapackage"的版本,否则人们永远不会得到新版本.

2.抛弃弃用警告

我可以发送一个旧宝石的版本,只是抛出弃用警告,并发出一条消息,人们应该安装新的宝石.

我看到的问题是它可能非常具有侵入性,可能会让人们[1]完全脱离宝石.

还有其他选择吗?"RubyGems"中是否有内容可以满足更改名称的需要?

[1]并不是说有太多人在使用它; 因为这个名字很难找到.:)

gem rubygems

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

在sinatra获得绝对(基础)网址

现在,我做了

get '/' do
  set :base_url, "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
  # ...
  haml :index
end
Run Code Online (Sandbox Code Playgroud)

能够在HAML index.haml中使用options.base_url.但我确信有更好的,干的,这样做的方式.然而,我看不到,也找不到它.(我是Sinatra的新手:))

不知何故,在get之外,我没有request.env可用,或者看起来如此.因此将它放入包含中并不起作用.

你如何得到你的基本网址?

ruby haml sinatra

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

如何将Nokogiri Document对象转换为JSON

我有一些解析Nokogiri::XML::Document对象,我想打印为JSON.

我可以将它变成一个字符串,将其解析为哈希,使用active-record或Crack然后使用Hash.to_json; 但这既丑陋又依赖于manay库.

有没有更简单的方法?

根据评论中的请求,例如,XML <root a="b"><a>b</a></root>可以表示为JSON:

<root a="b"><a>b</a></root> #=> {"root":{"a":"b"}}
<root foo="bar"><a>b</a></root> #=> {"root":{"a":"b","foo":"bar"}}
Run Code Online (Sandbox Code Playgroud)

这也是我现在用Crack得到的.实际上,实体和子标签之间的冲突是一个潜在的问题,但我自己构建了大部分XML,因此最简单的方法就是完全避免这些冲突:)

ruby xml json nokogiri

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

程序'rails'可以在以下软件包中找到 - 一些应用程序和RVM的问题?

我刚从github下载了一个应用程序代码,当我尝试运行该命令时rails s,我收到此错误 -

The program 'rails' can be found in the following packages:
 * rails
 * ruby-railties-3.2
Run Code Online (Sandbox Code Playgroud)

这仅适用于此应用,有人可以告诉我如何解决这个问题吗?我正在使用RVM

ruby ruby-on-rails ruby-on-rails-3

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

将项添加到Ruby中的数组,即使该变量不存在

我有以下内容:

foo ||= []
foo << "bar"
Run Code Online (Sandbox Code Playgroud)

而且我相信这可以在一行中完成,我无法找到.

重要的是,foo可能存在,也可能不存在.如果存在则它始终是一个Array,如果它不存在,它必须成为一个数组并获得一个附加到它的变量.

ruby arrays shorthand

15
推荐指数
2
解决办法
7824
查看次数

在Rails 3上使用Rspec和MongoID清理或重置测试数据库

当我运行我的rspec测试时,许多因我的mongodb数据库中的陈旧数据而失败.AFAIK用干净的数据库进行测试要好得多.

使用mysql,我可以运行rake db:test:prepare清理数据库.如何在每次测试之前清理nd /或重新种子数据库?

rspec mongoid ruby-on-rails-3

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

Array_filter在对象的上下文中,具有私有回调

我想使用array_filter函数过滤数组.它提示在水下使用call_user_func,但没有提及有关如何在类/对象的上下文中使用的任何内容.

一些伪代码解释了我的目标:

class RelatedSearchBlock {
  //...
  private function get_filtered_docs() {
    return array_filter($this->get_docs(), 'filter_item');
  }

  private filter_item() {
    return ($doc->somevalue == 123)
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要'filter_item'换成array($this, 'filter_item')吗?我想要的是什么?

php callback array-filter

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

将环境变量传递到php命令行脚本中

我想设置一个环境变量,然后在PHP中访问它,但无法找到如何执行此操作.

在(linux)shell中,我运行:

$ APP_ENV="development"
$ export $APP_ENV
Run Code Online (Sandbox Code Playgroud)

然后我运行一个简单的测试脚本testenv.php:

<?php
print $_ENV["APP_ENV"];
print getenv("APP_ENV");
Run Code Online (Sandbox Code Playgroud)

从设置该变量的同一个shell:

$ php testenv.php
Run Code Online (Sandbox Code Playgroud)

这没有打印并发出通知:

Notice: Undefined index: APP_ENV in /xxxx/envtest.php on line 2
Run Code Online (Sandbox Code Playgroud)

注意事项是有道理的,因为在环境变量中根本找不到APP_ENV,不会getenv()抛出任何警告但只返回任何内容.

我错过了什么?

php environment-variables command-line-interface

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