标签: ruby

如何获取方法的引用?

是否有可能在Ruby中获取对象方法的引用(我想知道是否可以在没有procs/lambdas的情况下完成),例如,请考虑以下代码:


class X
  def initialize
    @map = {}
    setup_map
  end

  private
  def setup_map
    # @map["a"] = get reference to a method
    # @map["b"] = get reference to b method
    # @map["c"] = get referebce to c method
  end

  public
  def call(a)
    @map["a"](a) if a > 10
    @map["b"](a) if a > 20
    @map["c"](a) if a > 30
  end

  def a(arg)
     puts "a was called with #{arg}"
  end

  def b(arg)
     puts "b was called with #{arg}"
  end

  def c(arg)
    puts "c was called with #{arg}" …
Run Code Online (Sandbox Code Playgroud)

ruby methods hash reference

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

Rails App在后台运行长任务的最佳实践?

我有一个Rails应用程序,不幸的是在向控制器发出请求之后,需要做一些需要一段时间的运算.Rails中为长期运行的任务或请求提供反馈或进度的最佳做法是什么?这些控制器方法通常持续60秒以上.

我不关心客户端......我计划每隔一秒左右发出一次Ajax请求并显示进度指示器.我只是不确定Rails最佳实践,我是否创建了一个额外的控制器?我能做些什么聪明的事吗?我希望只使用Rails专注于服务器端的答案.

在此先感谢您的帮助.

编辑:

如果重要,http请求适用于PDF.然后我将Rails与Ruport一起生成这些PDF.问题是,这些PDF非常大并且包含大量数据.使用后台任务仍然有意义吗?假设平均PDF需要大约一分钟到两分钟,这会使我的Rails应用程序在此期间对任何其他服务器请求没有响应吗?

编辑2:

好的,经过进一步调查后,似乎我的Rails应用程序确实没有响应任何其他HTTP请求后请求大型PDF. 所以,我想现在的问题是:什么是最好的线程/后台机制? 它必须稳定并保持稳定.我很惊讶Rails没有内置的东西.

编辑3:

我已阅读此页:http://wiki.rubyonrails.org/rails/pages/HowToRunBackgroundJobsInRails.我很想阅读有关这些工具的各种经验.

编辑4:

如果重要的话,我正在使用Passenger Phusion"modrails".

编辑5:

我正在使用Windows Vista 64位开发机器; 但是,我的生产机器是Ubuntu 8.04 LTS.我应该考虑为我的开发机器切换到Linux吗?解决方案是否适用于两者?

ruby ruby-on-rails

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

rails如果是object.nil?那么魔术''在观点中?

这是其中之一,也许这么简单,我永远找不到它,因为其他人都已经知道了.

我有必须在我的视图中检查nil的对象所以我不会取消引用nil:

<%= if tax_payment.user; tax_payment.user.name; end %>
Run Code Online (Sandbox Code Playgroud)

或者我可以做这个变种:

<%= tax_payment.user ? tax_payment.user.name : '' %>
Run Code Online (Sandbox Code Playgroud)

所以这对大多数语言来说都没问题.但我觉得必须有一些闪亮的红宝石或铁杆我仍然缺少,如果这是我能做的最好的.

ruby ruby-on-rails

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

Ruby中这些块编码样式的区别或价值是什么?

哪种款式首选?一个与另一个有充分的理由吗?

提前致谢!

1) cmds.each do |cmd|
   end

2) cmds.each { |cmd|
   }
Run Code Online (Sandbox Code Playgroud)

示例代码:

cmds = [ "create", "update", "list", "help" ]

# Block style one
#
cmds.each do |cmd|
  puts "loop1, cmd: #{cmd}"
end

# Block style two
#
cmds.each { |cmd|
  puts "loop2, cmd: #{cmd}"
}
Run Code Online (Sandbox Code Playgroud)

ruby coding-style

32
推荐指数
4
解决办法
4154
查看次数

什么是动态语言,为什么C#不符合条件?

听播客,我听说C#不是动态语言而Ruby是.

什么是"动态语言"?动态语言的存在是否意味着存在静态语言?

为什么C#是动态语言,其他语言是动态的?如果C#不是动态的,为什么微软将它强烈推向市场?

那么为什么大多数.NET程序员都对它疯狂并留下其他语言并转向C#?

为什么Ruby"是未来的语言"?

c# ruby dynamic-languages static-libraries

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

在Rails中使用JSON创建嵌套对象

如何将JSON传递给RAILS应用程序,以便在has_many关系中创建嵌套的子对象?

这是我到目前为止所拥有的:

两个模型对象.

class Commute < ActiveRecord::Base
  has_many :locations
  accepts_nested_attributes_for :locations, :allow_destroy => true
end

class Location < ActiveRecord::Base
  belongs_to :commute
end
Run Code Online (Sandbox Code Playgroud)

通过Commute,我有一个标准的控制器设置.我希望能够使用JSON在单个REST调用中创建Commute对象以及多个子Location对象.我一直在尝试这样的事情:

curl -H "Content-Type:application/json" -H "Accept:application/json" 
-d "{\"commute\":{\"minutes\":0, 
\"startTime\":\"Wed May 06 22:14:12 EDT 2009\", 
\"locations\":[{\"latitude\":\"40.4220061\",
\"longitude\":\"40.4220061\"}]}}"  http://localhost:3000/commutes
Run Code Online (Sandbox Code Playgroud)

或者更具可读性,JSON是:

{
    "commute": {
        "minutes": 0,
        "startTime": "Wed May 06 22:14:12 EDT 2009",
        "locations": [
            {
                "latitude": "40.4220061",
                "longitude": "40.4220061"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我得到这个输出:

Processing CommutesController#create (for 127.0.0.1 at 2009-05-10 09:48:04) [POST]
  Parameters: {"commute"=>{"minutes"=>0, "locations"=>[{"latitude"=>"40.4220061", "longitude"=>"40.4220061"}], "startTime"=>"Wed May 06 22:14:12 …
Run Code Online (Sandbox Code Playgroud)

ruby json ruby-on-rails

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

可以使用Rails迁移来转换数据吗?

我正在尝试在我的Rails应用程序中转换一个列,为了参数,让我假装我试图将age我的users表中的列更改为字符串表示而不是int.

在我的迁移中我有这个;

def.self up
    add_column :users, :age_text, :string

    users = User.find(:all)

    users.each do |u|
       u.age_text = convert_to_text(u.age)
       u.save
    end
end

def self.convert_to_text(number)
   #code here to convert 1 to 'one' etc
end
Run Code Online (Sandbox Code Playgroud)

但它似乎没有起作用,我在这里尝试甚至可以进行迁移吗?

ruby migration ruby-on-rails

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

用ruby解压缩(zip,tar,tag.gz)文件

我想解压缩很多zip文件.是否有模块或脚本检查zip文件的格式并解压缩?这应该适用于Linux,我不关心其他操作系统.

ruby zip gzip unzip tar

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

在Ruby中编写二进制文件

是否有一种简单的方法将二进制数据写入二进制文件,就像我们以前在C/C++中所做的那样?例如,如何在不使用花哨数学的情况下创建具有序列化4字节整数值的4字节文件?

ruby

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

Ruby:布尔属性命名约定和使用

学习红宝石.我的印象是布尔属性应该如下命名:

my_boolean_attribute?
Run Code Online (Sandbox Code Playgroud)

但是,尝试执行以下操作时出现语法错误:

class MyClass
  attr_accessor :my_boolean_attribute?

  def initialize
    :my_boolean_attribute? = false
  end
end
Run Code Online (Sandbox Code Playgroud)

红宝石显然很讨厌"?".这是惯例吗?我究竟做错了什么?

ruby attributes conventions boolean-expression

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