小编Ste*_*fan的帖子

安装pry后找不到命令

我在bash提示符中使用以下行安装了pry和相关的gem:

gem install pry-plus --no-ri --no-rdoc
Run Code Online (Sandbox Code Playgroud)

该命令报告了成功的gem安装.

我发现的所有说明都说安装pry之后我可以通过输入prybash命令来获得pry提示符.但是,实际结果是bash: pry: command not found

which pry报告no pry in (...)省略号为$ PATH的位置.相比之下,which rake报告/local/tbh/rbenv/shims/rakewhich gem报告/local/tbh/rbenv/shims/gem

为什么pry的命令不是由gem install创建的?我怎样才能让它按设计工作?

(我在Scientific Linux下使用Ruby 1.9.3和rbenv(不是RVM)作为虚拟环境.)

ruby rubygems pry rbenv

6
推荐指数
1
解决办法
1864
查看次数

如何在Ruby中找到方法的嵌套?

在Ruby中,常量查找受嵌套影响,方法保留其嵌套.

例如,如果我有这些模块:

module A
  X = 1
end

module B
  X = 2
end

module Foo
end
Run Code Online (Sandbox Code Playgroud)

我可以定义Foo.a一个嵌套的方法[A, Foo]:

module Foo
  module ::A
    Module.nesting #=> [A, Foo]
    def Foo.a
      X
    end
  end
end

Foo.a #=> 1
Run Code Online (Sandbox Code Playgroud)

以及Foo.b嵌套的方法[Foo, B]:

module B
  module ::Foo
    Module.nesting #=> [Foo, B]
    def Foo.b
      X
    end
  end
end

Foo.b #=> 2
Run Code Online (Sandbox Code Playgroud)

如果我定义Foo::X:差异变得明显:

Foo::X = 3

Foo.a #=> 1  <- still resolves to A::X
Foo.b #=> 3 …
Run Code Online (Sandbox Code Playgroud)

ruby reflection nested constants

6
推荐指数
1
解决办法
191
查看次数

法拉第宝石未定义方法 'bytesize'=' for Hash`

我想向 API 发送 POST 请求。这是我的代码:

conn = Faraday.new(url: BASE) do |faraday|
  faraday.response :logger
  faraday.request  :url_encoded
  faraday.headers['Content-Type'] = 'application/json'
  faraday.headers["Authorization"] = "bearer #{AppConfig.instance.access_token}"
  faraday.adapter Faraday.default_adapter
end
form_data = {a: 1, b: 2}
conn.post("/api/test", form_data)
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

conn = Faraday.new(url: BASE) do |faraday|
  faraday.response :logger
  faraday.request  :url_encoded
  faraday.headers['Content-Type'] = 'application/json'
  faraday.headers["Authorization"] = "bearer #{AppConfig.instance.access_token}"
  faraday.adapter Faraday.default_adapter
end
form_data = {a: 1, b: 2}
conn.post("/api/test", form_data)
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

conn.post("/api/test", form_data.to_json)
Run Code Online (Sandbox Code Playgroud)

但它也不起作用。

ruby ruby-on-rails faraday ruby-on-rails-4

6
推荐指数
1
解决办法
6063
查看次数

创建从 0 到 n 的数字数组,表示正 n 和负 n

鉴于n,我想创建一个从0到 的数组n

10.make_array #=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

如果是负数,它也应该起作用n

-10.make_array #=> [0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
Run Code Online (Sandbox Code Playgroud)

我已经编写了这段代码,但我认为我让它变得比必要的更复杂(它不适用于负数):

class Fixnum
  define_method(:make_array) do
    my_array = []
    self.times() do |count|
      self.>(0)
      my_array.push(count)
    end
    my_array.push(self)
    my_array
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法或捷径来做同样的事情,以及关于如何处理负数的任何建议?

ruby arrays

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

什么是"Class.new"?

我不明白Sheep = Class.new下面这段代码中的部分.

module Fence 
  Sheep = Class.new do
    def speak
      "Bah."
    end
  end
end

def call_sheep
  Fence::Sheep.new.speak
end
Run Code Online (Sandbox Code Playgroud)

到底是做什么的?

ruby

5
推荐指数
1
解决办法
230
查看次数

如何处理 Rails/Ruby 中命名空间(模块)中的“点”(API 版本包含“点”——V2.4)?

我有一个2.4版本的API。我只是碰巧拥有它,而且没有办法重命名它。我该如何在 Rails 中处理它?我无法创建名称中带有点的命名空间:

module Api::V2.4
  # ...
end
Run Code Online (Sandbox Code Playgroud)

ruby api rest ruby-on-rails ruby-on-rails-5

5
推荐指数
1
解决办法
651
查看次数

列出Rails控制台中的所有Mongoid模型

我想在我的mongodb数据库中列出所有具有相应集合的模型?我正在使用mongoidgem for MongoDB.

我会尝试这样的事情

ActiveRecord::Base.send :subclasses 哪个工作正常,但我没有使用ActiveRecord.

ruby ruby-on-rails mongodb rails-console mongoid

5
推荐指数
1
解决办法
1624
查看次数

如何处理碰巧在Ruby中成为关键字的关键字参数?

给出以下方法,它接受两个关键字参数beginend:

def make_range(begin: 0, end: -1)
  # ...
end
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地调用这个方法:

make_range(begin: 2, end: 4)
Run Code Online (Sandbox Code Playgroud)

但是在实现方法时我如何使用关键字参数,因为两者都恰好是Ruby 关键字

这显然不起作用:

def make_range(begin: 0, end: -1)
  begin..end
end
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个示例,该问题适用于所有关键字,而不仅仅是beginend.

ruby keyword keyword-argument

5
推荐指数
1
解决办法
54
查看次数

如何在 Ruby 中使用 HTTP 服务器发送的事件?

我需要连接到 HTTP 服务器并订阅服务器发送事件 (SSE)源。

我发现支持这一点的唯一宝石是em-eventsource严重损坏)和sse-client-ruby,它似乎是一个裸露的片段,需要未指定的额外管道才能工作。

还有其他我可以使用的 Ruby gem 吗?或者,有人可以提供一个在 Ruby 中使用 SSE 事件的简单的本地示例吗?

ruby http server-sent-events

5
推荐指数
0
解决办法
1076
查看次数

如何传递&:作为参数读取到File.open,如Rubocop所示

我有这个代码

File.open(file_name, 'r') { |file| file.read }
Run Code Online (Sandbox Code Playgroud)

但是Rubocop警告:

罪行:

Style/SymbolProc:&:read作为参数传递open而不是块.

你怎么做到这一点?

ruby rubocop

5
推荐指数
1
解决办法
174
查看次数