标签: ruby

我如何检查rails 2上ruby中的对象是否为null?

我想检查我的对象何时@objectname不等于null以显示@objectnameelse 的值以显示未找到任何值.

我试过这个:

<% if (@objectname != null) then %>
Run Code Online (Sandbox Code Playgroud)

但我收到了一个错误.

ruby ruby-on-rails ruby-on-rails-2

41
推荐指数
4
解决办法
11万
查看次数

截断,事务和删除数据库策略之间的区别

使用Rspec时,截断,事务和删除数据库策略有什么区别?我找不到任何解释这个的资源.我阅读了数据库清理程序自述文件,但它没有解释这些内容的作用.

为什么我们必须为Capybara使用截断策略?我在测试时是否需要清理数据库,还是可以禁用它.我不明白为什么我应该在每个测试用例后清理我的数据库,这不会只是减慢测试速度吗?

ruby database testing rspec

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

使用Ruby解析XML

我是使用XML的新手,但只是需要放弃我的膝盖.我得到了一个通常的(对我来说)XML格式.标签内有冒号.

<THING1:things type="Container">
  <PART1:Id type="Property">1234</PART1:Id>
  <PART1:Name type="Property">The Name</PART1:Name>
</THING1:things>
Run Code Online (Sandbox Code Playgroud)

它是一个大文件,除此之外还有更多内容,但我希望这种格式对某人来说很熟悉.有没有人知道如何处理这种XML文档?

我宁愿不只是写一个解析文本的蛮力方式,但我似乎无法用REXML或Hpricot取得任何进展,我怀疑这是由于这些不寻常的标签.

我的红宝石代码:

    require 'hpricot'
    xml = File.open( "myfile.xml" )

    doc = Hpricot::XML( xml )

   (doc/:things).each do |thg|
     [ 'Id', 'Name' ].each do |el|
       puts "#{el}: #{thg.at(el).innerHTML}"
     end
   end
Run Code Online (Sandbox Code Playgroud)

...刚从...取消:http://railstips.org/blog/archives/2006/12/09/parsing-xml-with-hpricot/

我想我可以从这里找到一些东西,但这段代码什么都没有.它没有错误.它只是回来了.

ruby xml-parsing

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

将一个目录的内容复制到另一个目录

使用Ruby,如何将一个目录的内容复制到另一个目录?例如,给定(非空)目录A和B:

A/
  bar
  foo
B/
  jam
  jim
Run Code Online (Sandbox Code Playgroud)

我想将A中的所有内容复制到B中,从而导致:

A/
  bar
  foo
B/
  bar
  foo
  jam
  jim
Run Code Online (Sandbox Code Playgroud)

我无法使用,FileUtils.cp_r因为它复制了目录本身:

irb(main):001:0> require 'fileutils'
#=> true
irb(main):002:0> Dir['**/*']
#=> ["A", "A/bar", "A/foo", "B", "B/jam", "B/jim"]
irb(main):003:0> FileUtils.cp_r('A','B')
#=> nil
irb(main):004:0> Dir['**/*']
#=> ["A", "A/bar", "A/foo", "B", "B/A", "B/A/bar", "B/A/foo", "B/jam", "B/jim"]
Run Code Online (Sandbox Code Playgroud)

是否有比以下更好(更短,更有效)的答案?

Dir['A/*'].each{ |f| FileUtils.cp(f,"B") }
Run Code Online (Sandbox Code Playgroud)

ruby

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

如何从最后一个元素开始遍历数组?(红宝石)

我带来了以下解决方案,但我相信那里必须更好...

array = [ 'first','middle','last']

index = array.length
array.length.times { index -= 1; puts array[index]}
Run Code Online (Sandbox Code Playgroud)

ruby arrays iteration

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

在Ruby中生成后台进程

我正在为学校项目编写一个ruby bootstrapping脚本,这个引导过程的一部分是启动一些后台进程(编写并正常运行).我想做的是:

`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`
Run Code Online (Sandbox Code Playgroud)

但是,第一次调用时会阻塞执行daemon1.我已经看过一个Process.spawn方法的引用,但这似乎是一个1.9+的功能,我只限于Ruby 1.8.

我也尝试从不同的线程执行这些守护进程,但我希望我的引导脚本能够退出.

那么我怎样才能启动这些后台进程,以便我的引导脚本不会阻塞并且可以退出(但仍然让守护进程在后台运行)?

ruby background-process

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

过滤器在渲染之前但在控制器之后执行?

假设我在基本控制器中有一些逻辑将信息传递给视图以构建类似于痕迹的东西:

class ContextAwareController < ApplicationController

  after_filter :build_breadcrumb

  def build_breadcumb
    #...
  end
end
Run Code Online (Sandbox Code Playgroud)

我想此build_breadcrumb方法运行的主控制器的逻辑,但视图被呈现.

上面的代码运行得太晚了,但是before_filter太早了.

任何人都可以提出一种方法来实现这一点,而无需在子控制器中的每个操作结束时显式调用build_breadcumb吗?

谢谢

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

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

在C中是否存在像Ruby这样的"主要"方法?

我是Ruby的新手,如果听起来真的很傻,那么道歉.

我似乎无法弄清楚如何编写"主"代码并在同一文件中使用方法(类似于C).我最终得到一个"主"文件,它加载一个包含所有方法的单独文件.我很感激任何指导.

我发现了以下SO帖子,但我不明白: 我应该在我的ruby脚本中定义一个main方法吗?

虽然这不是什么大问题,但是能够在同一个文件中查看所有相关代码更容易.谢谢.

[-编辑-]

感谢所有回复的人 - 事实证明,您只需要定义代码上方的所有方法.一个例子如下:

def callTest1
    puts "in test 1"
end

def callTest2
    puts "in test 2" 
end

callTest1
callTest2
Run Code Online (Sandbox Code Playgroud)

我认为这是有道理的,因为Ruby需要事先了解所有方法.这与C不同,其中有一个头文件清楚地列出了可用的函数,因此可以在main()函数下定义它们

再次感谢所有回复的人.

ruby main-method

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

如何检查ActiveRecord使用的数据库名称

在database.yml中,您可以定义所有设置.如何从ruby访问这些设置?我看了看App::Application::config,但在那里找不到.另外,我记得有人能够在没有yaml的情况下配置数据库设置,有谁知道怎么做?

ruby configuration ruby-on-rails

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

Ruby gem权限使用Ubuntu拒绝/ var/lib/gems

我正在尝试使用Gem安装Rails并从终端执行以下操作:

sudo apt-get install ruby-full build-essential
sudo apt-get install rubygems
export PATH=/var/lib/gems/1.8/bin:$PATH
gem install rails
Run Code Online (Sandbox Code Playgroud)

然后我收到以下消息:

错误:执行gem时...(Errno:EACCES)权限被拒绝 - /var/lib/gems

我遵循了Ubuntu帮助指南中的说明,我使用Oracle VM VirtualBox在Windows 7下运行Ubuntu,并使用RubyGems v1.8.15.

ruby ubuntu gem

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