标签: irb

ruby和nor irb都不能在当前目录中加载.rb文件

我在Ruby中导入文件时遇到了麻烦.我在Windows XP中制作一个Ruby应用程序.该应用程序的所有类文件都在"C:/Documents/Prgm/Surveyor_Ruby/lib".但是当我require在另一个文件中的文件时,ruby和irb都无法找到所需的文件.

当前目录的内容:

C:\Documents\Prgm\Surveyor_Ruby\lib>dir
 Volume in drive C has no label.
 Volume Serial Number is AAAA-BBBB

 Directory of C:\Documents\Prgm\Surveyor_Ruby\lib

10/09/2010  06:32 PM    <DIR>          .
10/09/2010  06:32 PM    <DIR>          ..
10/08/2010  03:22 PM             5,462 main (commented).rb
10/08/2010  03:41 PM                92 question.rb
10/08/2010  09:06 PM             2,809 survey.rb
10/09/2010  06:25 PM               661 surveyor.rb
10/08/2010  01:39 PM             1,546 test.rb
               5 File(s)         10,570 bytes
               2 Dir(s)  40,255,045,632 bytes free
Run Code Online (Sandbox Code Playgroud)

确认irb在正确的目录中:

C:\Documents\Prgm\Surveyor_Ruby\lib>irb
irb(main):001:0> Dir.pwd
=> "C:/Documents/Prgm/Surveyor_Ruby/lib"
Run Code Online (Sandbox Code Playgroud)

...但是irb无法加载survey.rb:

irb(main):002:0> require 'survey'
LoadError: no …
Run Code Online (Sandbox Code Playgroud)

ruby import irb require ruby-1.9.2

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

重新加载rails控制台

关于Rails控制台的使用,当我对模型进行一些更改时,是否每次都需要重新加载rails控制台以使该更改反映出来?

例如,我的原始代码如下:

class Article < ActiveRecord::Base
  validates :title, :presence => true
  validates :body, :presence => true
end
Run Code Online (Sandbox Code Playgroud)

稍后,我想添加一些额外的属性,如下所示.

class Article < ActiveRecord::Base
  validates :title, :presence => true
  validates :body, :presence => true

  def long_title
    "#{title} - #{published_at}"
  end
end
Run Code Online (Sandbox Code Playgroud)

是否需要运行命令"reload!" 每次都可以做"long_title"方法调用?否则,我将收到错误,因为该属性尚未定义.为什么我们需要手动执行?

ruby-on-rails irb

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

如何在当前类的上下文中运行IRB.start

我一直在使用Ruby进行PragProg 连续测试,在那里他们讨论IRB在当前类的上下文中调用以手动检查代码.

但是,他们引用如果你IRB.start在一个类中调用,self是预定义的,并引用我们在调用start时所在的对象,这在我的情况下是不正确的.

即使是非常简单的例子

a = "hello"
require 'irb'
ARGV.clear # otherwise all script parameters get passed to IRB
IRB.start
Run Code Online (Sandbox Code Playgroud)

当我尝试访问a变量时,我明白了

NameError: undefined local variable or method `a' for main:Object
Run Code Online (Sandbox Code Playgroud)

它仅在我更改a为全局变量时有效

$a = "hello"
require 'irb'
ARGV.clear # otherwise all script parameters get passed to IRB
IRB.start
Run Code Online (Sandbox Code Playgroud)

然后我可以访问它

irb(main):001:0> $a
=> 1
Run Code Online (Sandbox Code Playgroud)

有没有办法解决当前类中的本地和实例变量?

ruby irb

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

rails console - 在表中显示活动记录结果

有没有办法在脚本/控制台环境中以表格格式显示Active Record结果?

ruby console rubygems ruby-on-rails irb

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

Rails 3 - 如何在IRB控制台中访问Devise的current_user?

我正在IRB中进行一些设计/调试,需要登录用户,然后才能在我的努力中使用current_user.

从Brian Deterling 对另一个问题的回答,我已经能够成功登录并使用以下顺序访问页面响应:

>> ApplicationController.allow_forgery_protection = false
>> app.post('/sign_in', {"user"=>{"login"=>"some-login-id", "password"=>"some-password"}})
>> app.get '/some_other_path_that_only_works_if_logged_in'
>> pp app.response.body
Run Code Online (Sandbox Code Playgroud)

注意:如果您收到200响应,则表示您尚未登录.您需要302重定向才能表示登录成功.看Tim Santeford的回答.

我已经能够得到会话信息:

1.9.3-p125 :009 > app.session
 => {"_csrf_token"=>"1yAn0jI4VWzUH84PNTH0lVhjpY98e9echQGS4=", "session_id"=>"89984667d30d0fec71f2a5cbb9017e24"} 
Run Code Online (Sandbox Code Playgroud)

我用尽了一切我能想到的,试图去current_user通过appapp.session,但没有运气.我该怎么current_user办?

session irb devise ruby-on-rails-3

26
推荐指数
1
解决办法
1万
查看次数

Ruby中使用'_'(下划线)的奇怪行为

只是好奇它.

如果您打开IRB并输入_,您将获得nil响应:

irb(main):001:0> _
=> nil
Run Code Online (Sandbox Code Playgroud)

你可以修改它的值:

irb(main):002:0> _ = 'some value'
irb(main):003:0> _
=> "some value"
Run Code Online (Sandbox Code Playgroud)

但是,如果使用创建新变量_,则会修改其值:

irb(main):004:0> foo_bar = 'other value'
irb(main):005:0> _
=> "other value"
Run Code Online (Sandbox Code Playgroud)

为什么?这是一个设计决定吗?

ruby irb

25
推荐指数
2
解决办法
1918
查看次数

如何从命令行退出IRB?(在mac上使用终端)

基本上,我在终端打字很好,使用IRB运行ruby命令:

2.0.0-p0 :014 > bank_account.withdraw(2222)
 => -1222 
Run Code Online (Sandbox Code Playgroud)

但有时我不小心错过了一个引号.

2.0.0-p0 :020 > BankAccount.create_for("Jim","Johnson)
2.0.0-p0 :021"> bank_account.withdraw(333)
Run Code Online (Sandbox Code Playgroud)

如果你仔细观察,你会发现我遗漏的语音标记出现在左边的行号旁边,旁边是补丁版本.

从现在开始,每次运行命令时都会出现该语音标记!它会阻止命令工作:

2.0.0-p0 :021"> BankAccount.create_for("Julian","Hurley")
2.0.0-p0 :022"> BankAccount.create_for("Katt","Smith")
2.0.0-p0 :023"> exec($0)
Run Code Online (Sandbox Code Playgroud)

我想知道的是,我该如何摆脱这个引号?或者从命令行退出IRB以重置它?

terminal ruby-on-rails irb

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

IRB历史不适用于Ruby 2.3.0

我在OS X 10.11.4上通过rbenv安装了Ruby 2.3.0p0.在IRB会议期间,历史记录正常.但是,我无法跨会话访问IRB历史记录.

我尝试了我的系统Ruby,2.0.0p648,IRB会话的历史记录工作正常.我尝试通过rbenv安装相同版本的Ruby,它也有工作历史.

我比较了IRB.conf工作会话和非工作会话之间的值,没有看起来不合适(尽管奇怪的是,在这两种情况下,irb/ext/save-history.rb都是空白文件).

查看我的.irb_history文件,它似乎被替换,而不是附加到最新会话的命令.我可以加载2.0.0 IRB会话并滚动这些命令就好了.

我已经尝试过rbenv irb历史记录中列出的答案没有成功保存.

我也尝试了irb历史中选定的答案不起作用.我不得不改变选择的答案来替换#nitems方法.这表明正在从历史文件中读出行,并将其推送到Readline::HISTORY.然而,检查Readline::HISTORY显示没有.

通过将我的.irb_history中的前一行添加到Readline历史记录中Readline.readline,并指定add_hist = true,我可以破解历史.但是,绝对不是将以前的命令添加到Readline的正确方法.

我知道我可以切换到像撬的东西,但我想弄清楚这一点.有关为什么命令没有被添加到Readline的任何建议,以及如何更改它?

ruby macos irb readline ruby-2.3

24
推荐指数
1
解决办法
5825
查看次数

我如何在Ruby中反省内容?

例如,在Python中,如果我想获取对象的所有属性,我可以做这样的事情:

>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
Run Code Online (Sandbox Code Playgroud)

或者,如果我想查看某些内容的文档,我可以使用帮助功能:

>>> help(str)
Run Code Online (Sandbox Code Playgroud)

有没有办法在Ruby中做类似的事情?

ruby introspection irb

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

从irb获取所有局部变量或可用方法?

当我进入irb并输入一个不存在的命令时,我收到一个错误说明

"undefined local variable or method 'my_method' for main:Object (NameError)"
Run Code Online (Sandbox Code Playgroud)

有没有办法获得可用的局部变量或方法的列表?这对于探索ruby非常有用.

ruby reflection irb

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