我可以轻松地提升Ruby中的类层次结构:
String.ancestors # [String, Enumerable, Comparable, Object, Kernel]
Enumerable.ancestors # [Enumerable]
Comparable.ancestors # [Comparable]
Object.ancestors # [Object, Kernel]
Kernel.ancestors # [Kernel]
Run Code Online (Sandbox Code Playgroud)
有没有办法下降层次结构?我想这样做
Animal.descendants # [Dog, Cat, Human, ...]
Dog.descendants # [Labrador, GreatDane, Airedale, ...]
Enumerable.descendants # [String, Array, ...]
Run Code Online (Sandbox Code Playgroud)
但似乎没有一种descendants方法.
(出现这个问题是因为我想找到Rails应用程序中的所有模型,这些模型来自基类并列出它们;我有一个控制器可以使用任何这样的模型,我希望能够添加新模型无需修改控制器.)
什么是Ruby最好/最简单的GUI库?
我更喜欢跨平台的GUI库,但目前我只关心Windows(Win32).我发现难以找到任何看起来容易使用的东西.有吗?
我有一些具有after_save回调的模型.通常这很好,但在某些情况下,比如在创建开发数据时,我想保存模型而不运行回调.有一个简单的方法吗?类似于......的东西
Person#save( :run_callbacks => false )
Run Code Online (Sandbox Code Playgroud)
要么
Person#save_without_callbacks
Run Code Online (Sandbox Code Playgroud)
我查看了Rails文档但没有找到任何内容.但是根据我的经验,Rails文档并不总是讲述整个故事.
UPDATE
我发现了一篇博文,解释了如何从这样的模型中删除回调:
Foo.after_save.clear
Run Code Online (Sandbox Code Playgroud)
我找不到该方法的记录,但似乎有效.
我有以下创建的对象
@post = Post.create(:name => 'test', :post_number => 20, :active => true)
Run Code Online (Sandbox Code Playgroud)
保存后,我希望能够将对象恢复为哈希值,例如通过执行以下操作:
@object.to_hash
Run Code Online (Sandbox Code Playgroud)
如何在轨道内实现这一目标?
~>在Ruby gem依赖关系的上下文中意味着什么?
例如,在RubyMine IDE中打开旧项目时,我收到此消息
Gems required for project are not attached: arel (~> 2.0.2), rspec-expectation (~> 2.5.0)...
我已经在Ruby世界的其他地方看到了这种波形符号(它不是特定于RubyMine).这个操作符的名称是否比笨拙的波形符号更大?
[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10
Run Code Online (Sandbox Code Playgroud)
我正在看这个代码,但我的大脑没有记录数字10如何成为结果.有人会介意解释这里发生了什么吗?
是否有一种简单或优雅的方法来合并两个哈希而不会覆盖重复的键?
也就是说,如果密钥存在于原始哈希中,我不想更改其值.
我试图在我的rails应用程序中将哈希映射ID保存到多次尝试中.我迁移到数据库以适应这个新列:
class AddMultiWrongToUser < ActiveRecord::Migration
def self.up
add_column :users, :multi_wrong, :string
end
def self.down
remove_column :users, :multi_wrong
end
end
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我有:
class User < ActiveRecord::Base
serialize :multi_wrong, Hash
end
Run Code Online (Sandbox Code Playgroud)
但是,当我使用rails控制台通过执行以下操作来测试时:
user = User.create()
user.multi_wrong = {"test"=>"123"}
user.save
Run Code Online (Sandbox Code Playgroud)
输出为false.这里出了什么问题?