如何在下面的过滤器中找到命名空间或模块"Foo"的名称?
class ApplicationController < ActionController::Base
def get_module_name
@module_name = ???
end
end
class Foo::BarController < ApplicationController
before_filter :get_module_name
end
Run Code Online (Sandbox Code Playgroud) 在Ruby中使用文件时,r+和w+模式之间有什么区别?a+模式怎么样?
我正在使用ruby 1.9.2
我正在尝试解析包含一些法语单词的CSV文件(例如spécifié)并将内容放在MySQL数据库中.
当我从CSV文件中读取行时,
file_contents = CSV.read("csvfile.csv", col_sep: "$")
Run Code Online (Sandbox Code Playgroud)
这些元素以ASCII-8BIT编码的字符串形式返回(spécifié变为sp\xE9cifi\xE9),然后像"spécifié"这样的字符串未正确保存到我的MySQL数据库中.
Yehuda Katz说ASCII-8BIT实际上是"二进制"数据,这意味着CSV不知道如何读取适当的编码.
所以,如果我尝试使CSV强制编码如下:
file_contents = CSV.read("csvfile.csv", col_sep: "$", encoding: "UTF-8")
我收到以下错误
ArgumentError: invalid byte sequence in UTF-8:
Run Code Online (Sandbox Code Playgroud)
如果我回到我原来的ASCII-8BIT编码字符串并检查我的CSV读取为ASCII-8BIT的字符串,它看起来像"非sp\xE9cifi\xE9"而不是"非spécifié".
这样做我无法将"Non sp\xE9cifi\xE9"转换为"非spécifié"
"Non sp\xE9cifi\xE9".encode("UTF-8")
因为我收到这个错误:
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8,
Katz指出会发生这种情况,因为ASCII-8BIT实际上并不是一个正确的字符串"编码".
问题:
在Ruby Koans中,about_hashes.rb部分包含以下代码和注释:
def test_changing_hashes
hash = { :one => "uno", :two => "dos" }
hash[:one] = "eins"
expected = { :one => "eins", :two => "dos" }
assert_equal true, expected == hash
# Bonus Question: Why was "expected" broken out into a variable
# rather than used as a literal?
end
Run Code Online (Sandbox Code Playgroud)
我无法在评论中找出奖金问题的答案 - 我实际上尝试过他们建议的替换,结果是一样的.我可以理解的是,它是为了可读性,但我没有看到像本教程中其他地方所述的一般编程建议.
(我知道这听起来好像已经在某个地方得到了回答,但我无法挖掘任何权威的东西.)
我正在尝试从ruby中的哈希表中获取第一个键和值键.我不知道哈希的键值,因为它传递给方法.我无法在网上找到如何找到第一个键/值作为单独的哈希表.我想hash[0]只会尝试找到一个名为0的元素,它只是nil在我运行代码时返回.
我知道我可以找到关键名称和值,然后从他们创建一个新的哈希,但我想知道是否有一个更简单的方法来做到这一点,所以我马上得到一个哈希.
这是我的代码:
def rps_game_winner(game)
rock_in_hash = game.invert['R']
paper_in_hash = game.invert['P']
scissors_in_hash = game.invert['S']
if(rock_in_hash)
if(paper_in_hash)
return paper_in_hash;
elsif(scissors_in_hash)
return rock_in_hash
end
elsif(paper_in_hash)
if(rock_in_hash)
return paper_in_hash
elsif(scissors_in_hash)
return scissors_in_hash
end
end
key = game.keys[-1]
value = game.values[-1]
winner = {key => value}
return winner
end
game_one = { "Bob" => 'P', "Jim" => 'P' }
puts rps_game_winner(game_one)
Run Code Online (Sandbox Code Playgroud)
这让我得到了正确的结果问题是我不明白为什么它是-1而不是零...我希望有更好的方法来获得哈希表的第一个键/值对而不是创建新哈希表格,其中包含您从上一个表格中检索到的键和值.
我想一般回答这个问题,但为了说明一下,这是一个用例:
我正在使用Vagrant进行简单的LMAP项目.我使用独立的Puppet进行配置.现在,可能有一些开发人员坐在代理后面,他们需要对VM进行一些额外的配置.我有事情在Puppet方面工作:我可以将代理IP(如果有的话)作为事实传递给Ppetpet中的Vagrantfile木偶,如果它已经设置,Puppet会做出相应的反应.
我唯一的问题是:开发人员如何为他们的开发环境指定/覆盖此设置而无需更改Vagrantfile(在版本控制下并且必须保持dev-environment-neutral)?
如果人们可以覆盖一个名为例如Vagrantfile.local我将排除通过的文件中的一些Vagrant设置,那将是非常棒的.gitignore.
由于Vagrantfile只是Ruby,我尝试了以下内容:
# Also load per-dev custom vagrant config
custom_vagrantfile = 'Vagrantfile.local'
load custom_vagrantfile if File.exist?(custom_vagrantfile)
Run Code Online (Sandbox Code Playgroud)
文件包含基本上是可行的,但它看起来像在包含的文件中,我不再在同一个Vagrant上下文中...
Vagrant::Config.run do |config|
config.vm.provision :puppet do |puppet|
puppet.facter = { "proxy" => "proxy.host:80" }
end
end
Run Code Online (Sandbox Code Playgroud)
...还"重置"我在主要部分制作的所有其他木偶配置值Vagrantfile,这让我觉得我在这里朝着错误的方向前进.我应该注意到我在Ruby的总菜鸟;)
任何人都可以给我一个提示,甚至是一个有效的解决方案,可以在这里完成per-dev定制吗?
我知道我可以做以下事情,它只有3行:
class << self
alias :generate :new
end
Run Code Online (Sandbox Code Playgroud)
但出于好奇,有一种更简单的方式(没有分号),如:
class_alias :generate, :new
Run Code Online (Sandbox Code Playgroud) 我想用空格分割字符串,,并'使用单个ruby命令.
word.split 将被白色空间分开;
word.split(",")将分裂,;
word.split("\'")将分裂'.
如何一次完成这三个?
我有一个在生产模式下运行的rails应用程序,但是当用户试图保存记录时,突然出现了这个错误.
Mysql2::Error: Incorrect string value
Run Code Online (Sandbox Code Playgroud)
更多细节(来自生产日志):
Parameters: {"utf8"=>"â<9c><93>" ...
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k
Run Code Online (Sandbox Code Playgroud)
现在我看到了一些需要删除数据库并重新创建数据库的解决方案,但我不能这样做.
现在mysql显示了这个:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec) …Run Code Online (Sandbox Code Playgroud) 我已经使用railsinstaller在Windows上安装了Rails和Ruby.问题是,当我运行rails命令时,它给了我:"系统找不到指定的路径."
我正在运行Windows 7 x64和Ruby 2.20.
我尝试卸载Rails并重新安装它; 这没有用.Ruby命令执行,ruby -v但rails -v=不起作用.