标签: ruby

如何在Ruby on Rails中以编程方式找到命名空间/模块名称?

如何在下面的过滤器中找到命名空间或模块"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 namespaces ruby-on-rails

55
推荐指数
5
解决办法
4万
查看次数

`File`对象的访问模式之间的区别(即w +,r +)

在Ruby中使用文件时,r+w+模式之间有什么区别?a+模式怎么样?

ruby io file-io file

55
推荐指数
4
解决办法
5万
查看次数

Ruby将CSV文件读取为UTF-8和/或将ASCII-8Bit编码转换为UTF-8

我正在使用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实际上并不是一个正确的字符串"编码".

问题:

  1. 我可以使用CSV以适当的编码读取我的文件吗?如果是这样,怎么样?
  2. 如何将ASCII-8BIT字符串转换为UTF-8以便在MySQL中正确存储?

ruby csv string encoding utf-8

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

Ruby Koans的test_changing_hashes中的奖金问题的答案是什么?

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

55
推荐指数
1
解决办法
4543
查看次数

如何从Ruby中的哈希表中获取第一个键和值对

我正在尝试从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而不是零...我希望有更好的方法来获得哈希表的第一个键/值对而不是创建新哈希表格,其中包含您从上一个表格中检索到的键和值.

ruby hash

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

在本地覆盖Vagrant配置设置(每个开发人员)

我想一般回答这个问题,但为了说明一下,这是一个用例:

我正在使用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定制吗?

ruby vagrant

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

是否有更简单的(单行)语法来为一个类方法添加别名?

我知道我可以做以下事情,它只有3行:

class << self
  alias :generate :new
end
Run Code Online (Sandbox Code Playgroud)

但出于好奇,有一种更简单的方式(没有分号),如:

class_alias :generate, :new
Run Code Online (Sandbox Code Playgroud)

ruby

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

由多个分隔符拆分字符串

我想用空格分割字符串,,'使用单个ruby命令.

  1. word.split 将被白色空间分开;

  2. word.split(",")将分裂,;

  3. word.split("\'")将分裂'.

如何一次完成这三个?

ruby string split

55
推荐指数
4
解决办法
5万
查看次数

Mysql2 ::错误:字符串值不正确

我有一个在生产模式下运行的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)

ruby mysql encoding ruby-on-rails

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

Rails - 系统找不到指定的路径

我已经使用railsinstaller在Windows上安装了Rails和Ruby.问题是,当我运行rails命令时,它给了我:"系统找不到指定的路径."

我正在运行Windows 7 x64和Ruby 2.20.

我尝试卸载Rails并重新安装它; 这没有用.Ruby命令执行,ruby -vrails -v=不起作用.

ruby windows ruby-on-rails

55
推荐指数
5
解决办法
4万
查看次数

标签 统计

ruby ×10

ruby-on-rails ×3

encoding ×2

string ×2

csv ×1

file ×1

file-io ×1

hash ×1

io ×1

mysql ×1

namespaces ×1

split ×1

utf-8 ×1

vagrant ×1

windows ×1