Tag: ruby

Ruby中的标准文件命名约定

对于包含给定类SomeCoolClass的文件,什么是正确或标准的文件名? 1. somecoolclass.rb 2. some_cool_class.rb 3. some-cool-class.rb 4. SomeCoolClass.rb 或其他一些变化? 我注意到在Ruby stdlib中,使用了版本1,版本2和版本3。

试图学习/理解Ruby setter和getter方法

我正在学习编程,并决定尝试Ruby。 我相信这是一个愚蠢的问题,但教练正在谈论二传手和getter方法,我很困惑。 这是一个例子: class Human def noise=(noise) @noise = noise end def noise @noise end end 从这里开始,这个类被实例化了,我可以这样说: man = Human.new man.noise=("Howdie!") puts man.noise 这导致了Howdie! 现在让我困惑的是,教师没有使用getter方法(两种方法中的第二种),没有办法与实例variables@noi​​se进行交互。 但是,当我删除getter方法,我仍然可以访问@noise,请参阅示例: class Human def noise=(noise) @noise = noise end end man = Human.new puts man.noise=("Howdie!") 这与其使用的getter方法相同。 所以现在我很困惑。 为什么需要吸气剂? 如果没有它,不能访问实例variables,教师意味着什么? 他有可能使用旧版本的Ruby吗? 在此先感谢您的帮助。

何时使用助手而不是部分

在一个Rails应用程序中,在哪种情况下你会使用一个部分,你什么时候可以使用一个帮助器? 我发现两者非常相似,因为它们代表标记片段。 这是否有一个约定? 这是使用它们的'rails方式'吗? 谢谢!

rbenv:没有gemsets的生存

TL; DR 不要打扰gem; 多个版本的gem可能同时安装。 必要时,使用$ gem-based-binary _version_ args表示法指定要执行的版本。 当你有一个指定版本的Gemfile时使用bundle exec 。 gem install rails -v 3.2.13 rails _3.2.13_ new Project2 cd Project2 bundle exec rails server 更新: 2015-06-04 三年前我写了这个问题。 部分原因是基于一个错误的假设,一部分情况从那时起就改变了。 感谢@indirect原来的回答,我想提请注意@开尔文的较新的(不太高效的)答案,总结如上。 我的错误假设:一次只能安装一个版本的gem,因此需要gemset来隔离命名空间。 不对。 多个版本的gem可以同时安装。 除非你有一个指定版本约束的Gemfile,并且通过bundle exec调用命令,或者指定版本作为它的第一个参数,否则最新的一个将在命令行调用时使用。 另请参见如何从命令行调用gem的旧版本? re:下划线版本符号。 原始问题: 我有多个项目正在使用不同版本的Rails。 我有一个工作stream程(如下所述),用于使用特定版本的rails创build项目,并保持项目彼此隔离。 我想尝试其他工作stream程,特别是使用rbenv而不是RVM,但不清楚如何操作。 问题:当使用rbenv和bundler时 ,与使用rbenv-gemset或rvm相比,创build多个使用不同版本的rails的多个rails项目的最佳做法是什么? 用例:我有两个rails项目,叫做ProjectA和ProjectB。 ProjectA是使用一个版本的rails(“RailsA”)开发的,而ProjectB使用不同的版本(“RailsB”)。 如何安装两个版本? GEMSETS方法:当我第一次开始使用Rails开发时,我使用了RVM 。 除了支持多个并发安装的Ruby之外,RVM支持多个命名的Gem Sets 。 每个项目都有自己独立的gem集合(包括rails本身),称为gemset: rvm gemset […]

Rails 3分页,will_paginate与Kaminari

我的设置:Rails 3.0.9,Ruby 1.9.2 我正在为我的应用程序寻找一个分页解决scheme,并看到有一个新的ISHgemKaminari相比,值得信赖的will_paginate 。 它看起来像will_paginate没有更新一段时间,但从V3.0回来。 什么是共识,是一个优于对方,为什么? 提前感谢您的见解。 编辑 我在Twitter上问Ryan Bates,他说 两者同样做得好。 最大的因素是如果你使用任何需要分页的gem,因为它们不兼容。 我喜欢will_paginate的非引擎方法多一点,但这是个人喜好。

Ruby中的“〜〜”运算符是什么?

我在屏幕截图上看到了这一点,无法弄清楚它是什么。 参考手册只是将其与其他操作员一起作为一般模式匹配操作员。

使用Rails时,在Ruby中处理常量的最佳方式是什么?

我有一些常量代表我的模型的字段中的有效选项。 在Ruby中处理这些常量的最好方法是什么?

Rails:如何为ruby模块编写testing?

我想知道如何编写一个模块的unit testing,混合到几个类,但不知道如何去做: 我是否通过在其中一个包含它们的类的testing文件中编写testing来testing实例方法(看起来不正确),还是可以以某种方式将包含的方法的testing保存在特定于模块的单独文件中? 同样的问题适用于类方法。 我是否应该为模块中的每个类提供单独的testing文件,就像普通的rails模型一样,或者是否存在于通用模块testing文件中?

对于Rspec的“should_receive”,是否有一个较less侵入的select?

在编写Rspectesting时,我经常为should_receive感到沮丧。 我想知道是否有一个不太干扰的select。 例如: describe "making a cake" do it "should use some other methods" do @baker.should_receive(:make_batter) @baker.make_cake end end 对should_receive的调用是一个很好的描述,但是它破坏了我的代码,因为should_receive通过掩盖原始方法来工作, make_cake不能继续,除非make_batter实际返回一些连击。 所以我改变它: @baker.should_receive(:make_batter).and_return(@batter) 这是丑陋的,因为: 它看起来像我testingmake_batter正确地返回@batter ,但我实际上是迫使伪造的版本make_batter返回。 它迫使我分别设置@batter 如果make_batter有任何重要的副作用(这可能是一种代码味道,我想),我也必须做到这一点。 我希望should_receive(:make_batter)将validation方法调用并将其传递给原始方法 。 如果我想将它的行为存储为更好的隔离性testing,我会明确地这样做: @baker.stub(:make_batter).and_return(@batter) 。 有没有办法做一些像should_receive而不阻止原始方法调用? 我的问题是不良devise的症状吗?

删除/取消定义类方法

你可以像下面这样为一个类dynamic地定义一个类方法: class Foo end bar = %q{def bar() "bar!" end} Foo.instance_eval(bar) 但是,你如何做相反的: 删除/取消定义类方法? 我怀疑模块的remove_method和undef_method方法可能可以用于这个目的,但所有我看到谷歌search了几个小时后的例子是去除/定义实例方法,而不是类方法。 或者也许有一种语法可以传递给instance_eval来做到这一点。 提前致谢。