是否有可能在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) 我有一个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吗?解决方案是否适用于两者?
这是其中之一,也许这么简单,我永远找不到它,因为其他人都已经知道了.
我有必须在我的视图中检查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)
所以这对大多数语言来说都没问题.但我觉得必须有一些闪亮的红宝石或铁杆我仍然缺少,如果这是我能做的最好的.
哪种款式首选?一个与另一个有充分的理由吗?
提前致谢!
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) 听播客,我听说C#不是动态语言而Ruby是.
什么是"动态语言"?动态语言的存在是否意味着存在静态语言?
为什么C#是动态语言,其他语言是动态的?如果C#不是动态的,为什么微软将它强烈推向市场?
那么为什么大多数.NET程序员都对它疯狂并留下其他语言并转向C#?
为什么Ruby"是未来的语言"?
如何将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) 我正在尝试在我的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)
但它似乎没有起作用,我在这里尝试甚至可以进行迁移吗?
我想解压缩很多zip文件.是否有模块或脚本检查zip文件的格式并解压缩?这应该适用于Linux,我不关心其他操作系统.
是否有一种简单的方法将二进制数据写入二进制文件,就像我们以前在C/C++中所做的那样?例如,如何在不使用花哨数学的情况下创建具有序列化4字节整数值的4字节文件?
学习红宝石.我的印象是布尔属性应该如下命名:
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 ×10
attributes ×1
c# ×1
coding-style ×1
conventions ×1
gzip ×1
hash ×1
json ×1
methods ×1
migration ×1
reference ×1
tar ×1
unzip ×1
zip ×1