标签: ruby

在Ruby中用括号括起来

我最近在使路径正常工作时遇到了一些问题.解决方案结果很简单,但我遇到了一个意想不到的问题,阻止了我进入它.包含在erb模板中的以下行完美运行:

<%= button_to "Confirm delivery", delivery_confirm_path( @delivery ) %>
Run Code Online (Sandbox Code Playgroud)

这个没有:

<%= button_to "Confirm delivery", delivery_confirm_path ( @delivery ) %>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,似乎不允许在左括号之前的间距.我得到的错误是这样的:

/app/views/deliveries/_delivery_buttons.html.erb:22: syntax error,
unexpected tLPAREN_ARG, expecting keyword_do or '{' or '('
...ivery", delivery_confirm_path ( @delivery ) );@output_buffer...
...                               ^
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会导致错误吗?

编辑:对于信息,这是在Windows 7 64位上的Ruby 1.9.2和Rails 3.0.9

ruby ruby-on-rails

9
推荐指数
1
解决办法
3662
查看次数

为什么Rails工作日索引与Ruby不同?

在Rails 3.0.10中

ruby-1.9.2-p180 :010 > Time::DAYS_INTO_WEEK
 => {:monday=>0, :tuesday=>1, :wednesday=>2, :thursday=>3, :friday=>4, :saturday=>5, :sunday=>6} 
Run Code Online (Sandbox Code Playgroud)

和

ruby-1.9.2-p180 :011 > Date.today
 => Mon, 10 Oct 2011 
ruby-1.9.2-p180 :012 > Date.today.wday
 => 1 
Run Code Online (Sandbox Code Playgroud)

因此,星期一在时间映射中为0,在日期映射中为1.
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/time/calculations.rb

我觉得从星期日开始,零是更安全,更常见,更有可能被别人的方式去理解.我希望了解历史/推理,以防我忽视某些事情.

我的用例:我在我的数据库中明确地存储了星期几.我认为存储为整数比存储"星期一","星期二"等更有效,更容易使用.

PS我有一个好主意做类似以下的事情.从平日字符串里面来回映射方法(隐藏整数).

ruby-1.9.2-p180 :010 > Time::DAYS_INTO_WEEK
 => {:monday=>0, :tuesday=>1, :wednesday=>2, :thursday=>3, :friday=>4, :saturday=>5, :sunday=>6} 
Time::DAYS_INTO_WEEK[day_of_week.downcase.to_sym]
Time::DAYS_INTO_WEEK.to_a.select{|k, v| v == start_day }.first.first.to_s.capitalize
Run Code Online (Sandbox Code Playgroud)

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

9
推荐指数
1
解决办法
3126
查看次数

使用Ruby中的SSLServer验证客户端证书

下面是我用来设置服务器的代码:

require 'socket'
require 'openssl'

socket = TCPServer.new('127.0.0.1', 4433)

ssl_context = OpenSSL::SSL::SSLContext.new()
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("ssl/server/server.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open("ssl/server/server.key"))

ca_cert = OpenSSL::X509::Certificate.new(File.open("ssl/ca/ca.crt"))

ssl_socket = OpenSSL::SSL::SSLServer.new(socket, ssl_context)

Thread.start(ssl_socket.accept) do |s|
    puts "Connected to #{s.peeraddr.last}"

    if s.peer_cert.verify(ca_cert.public_key)
        puts "Certificate verified"
    else
        puts "Certificate invalid"
    end
end
Run Code Online (Sandbox Code Playgroud)

和客户:

require 'socket'
require 'openssl'

socket = TCPSocket.new('127.0.0.1', 4433)

ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("ssl/client1/client1.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open("ssl/client1/client1.key"))

ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)

ca_cert = OpenSSL::X509::Certificate.new(File.open("ssl/ca/ca.crt"))

ssl_socket.connect

if ssl_socket.peer_cert.verify(ca_cert.public_key)
    puts "Certificate checks out"
else
    puts "Certificate not verified" …
Run Code Online (Sandbox Code Playgroud)

ruby ssl client certificate

9
推荐指数
1
解决办法
3457
查看次数

Mongoid随机文件

假设我有一个用户集合.有没有办法使用mongoid在集合中找到n个随机用户,它不会返回同一个用户两次?现在让我们假设用户集合如下所示:

class User
  include Mongoid::Document
  field :name
end
Run Code Online (Sandbox Code Playgroud)

简单吧?

谢谢

ruby ruby-on-rails mongodb mongoid

9
推荐指数
3
解决办法
7654
查看次数

给定有序的id列表对对象数组进行排序

我有一组对象@users,每个对象都有自己的id属性.

@users = [#<User id:1>, #<User id:2>]
Run Code Online (Sandbox Code Playgroud)

我也有一个有序的数组ids.

ids = [2,1]
Run Code Online (Sandbox Code Playgroud)

¿有没有一种神奇的方法来使用ID列表对集合进行排序?如果可能的话,不要再次调用数据库.

谢谢 !!!

ruby sorting ruby-on-rails

9
推荐指数
2
解决办法
3746
查看次数

Capybara'拖放'不起作用

我在Mac上使用黄瓜/水豚/硒/火狐.所有工作都很好,除了d&d.拖放可通过drag_node.drag_to(drop_node).调用时,它不会引发任何错误,但实际的拖放从未发生过.

现在,我发现这个示例应用程序(由显然有类似问题的人编写)证明了这个问题,而不是复制粘贴的碎片.

然而谷歌却没有意识到drag_to()被打破了.据我所见.这给了我一个希望,就是我错过了一些东西而不是一个bug.那是什么?我错过了什么?一个bug?

ruby selenium ruby-on-rails cucumber capybara

9
推荐指数
2
解决办法
5955
查看次数

如何使用Ruby和MongoId正确保存时区?

如果这是一个noob问题,请原谅我:

我有一个应用程序,用户可以在他们的个人资料中设置自己的时区.

当有人添加阵容(特定于应用程序的术语)时,我会执行以下操作:

time = ActiveSupport::TimeZone.new(user.timezone).parse(
  "Wednesday, 26 October, 2011 13:30:00"
)

# This outputs: 2011-10-26 13:30:00 +0200 - valid according to the user selected TZ
Run Code Online (Sandbox Code Playgroud)

然后我保存了阵容:

Lineup.create({
   :date => time.gmtime,
   :uid  => user._id,
   :pid  => product._id
})
Run Code Online (Sandbox Code Playgroud)

这应该(理论上)将日期保存为gmtime,但在查看记录时我会得到以下信息:

{
  "_id": ObjectId("4e9c6613e673454f93000002"),
  "date": "Wed, 26 Oct 2011 13: 30: 00 +0200",
  "uid": "4e9b81f6e673454c8a000001",
  "pid": "4e9c6613e673454f93000001",
  "created_at": "Mon, 17 Oct 2011 19: 29: 55 +0200"
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,日期字段错误 - 它仍然保持用户时区,它应该是GMT,而不是特定于时区.

如果我输出time.gmtime,我会得到正确的时间(应该保存):

2011-10-26 11:30:00 UTC (correct)
Run Code Online (Sandbox Code Playgroud)

有任何想法如何保存GMT日期,以便它实际保存GMT日期?

ruby time timezone mongodb mongoid

9
推荐指数
1
解决办法
7013
查看次数

安装假日宝石时出错

我在尝试安装假日gem时收到以下错误:

# gem install holidays
Fetching: holidays-1.0.4.gem (100%)
ERROR:  Error installing holidays:
        holidays requires holidays (>= 0)
Run Code Online (Sandbox Code Playgroud)

我不是一个红宝石家伙,只是为Redmine Backlogs插件安装了一些deps .

版本和环境:

# gem -v
1.8.10

# ruby -v
ruby 1.8.7 (2010-06-23 patchlevel 299) [i386-linux]

CentOS Linux release 6.0 (Final)
# uname -r
2.6.32-71.29.1.el6.i686
Run Code Online (Sandbox Code Playgroud)

ruby rubygems redmine-plugins

9
推荐指数
2
解决办法
2181
查看次数

Ruby/Rails - 在新窗口中从控制器打开URL

我在我的应用程序控制器中,我有一个url字符串.如何告诉应用程序在新窗口中打开浏览器中的URL.有没有办法将目标设置为空白?

例如

def link
  @url = 'www.google.com'
  ****??? Open @url ?? *** with target blank?
end
Run Code Online (Sandbox Code Playgroud)

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

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

从inner_html中删除评论

我有一些使用Nokogiri的代码,我试图得到inner_html没有得到评论.

html = Nokogiri::HTML(open(@sql_scripts_url[1])) #using first value of the array
html.css('td[class="ms-formbody"]').each do |node|
  puts node.inner_html # prints comments
end
Run Code Online (Sandbox Code Playgroud)

ruby nokogiri

9
推荐指数
1
解决办法
3032
查看次数