标签: ruby

我可以在不包含Ruby模块的情况下调用实例方法吗?

背景:

我有一个声明了许多实例方法的模块

module UsefulThings
  def get_file; ...
  def delete_file; ...

  def format_text(x); ...
end
Run Code Online (Sandbox Code Playgroud)

我想从一个类中调用其中的一些方法.你通常如何在ruby中这样做是这样的:

class UsefulWorker
  include UsefulThings

  def do_work
    format_text("abc")
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

问题

include UsefulThings从中引入所有方法UsefulThings.在这种情况下,我只想要format_text并明确地不想get_filedelete_file.

我可以看到几个可能的解决方案:

  1. 以某种方式直接在模块上调用该方法,而不将其包含在任何地方
    • 我不知道如何做到这一点.(因此这个问题)
  2. 以某种方式包括Usefulthings并且只引入一些方法
    • 我也不知道如何做到这一点
  3. 创建一个代理类,包含UsefulThings在其中,然后委托format_text给该代理实例
    • 这可行,但匿名代理类是一个黑客.呸.
  4. 将模块拆分为2个或更多较小的模块
    • 这也可行,可能是我能想到的最好的解决方案,但我宁愿避免它,因为我最终会扩散数十个和几十个模块 - 管理这将是繁重的

为什么单个模块中有很多不相关的功能?它ApplicationHelper来自一个rails应用程序,我们的团队事实上决定将其作为任何其他地方不具备的特定任何东西的倾倒场.大多数独立的实用程序方法随处可见.我可以将它分解成单独的助手,但是它们中有30个,每个都有1个方法......这似乎没有效果

ruby methods module

171
推荐指数
9
解决办法
12万
查看次数

在Ruby中将数组输出为CSV

使用Ruby将CSV文件读入数组很容易,但是我找不到有关如何将数组写入CSV文件的任何好文档.谁能告诉我怎么做?

如果重要的话,我正在使用Ruby 1.9.2.

ruby csv

171
推荐指数
5
解决办法
16万
查看次数

在rspec中测试模块

在rspec中测试模块的最佳实践是什么?我有一些模块包含在少数模型中,现在我只是对每个模型进行了重复测试(差异很小).有没有办法让它干涸?

ruby unit-testing rspec

170
推荐指数
10
解决办法
7万
查看次数

如何确定一个数组是否包含另一个数组的所有元素

鉴于:

a1 = [5, 1, 6, 14, 2, 8]
Run Code Online (Sandbox Code Playgroud)

我想确定它是否包含以下所有元素:

a2 = [2, 6, 15]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,结果是false.

是否有任何内置的Ruby/Rails方法来识别这种数组包含?

实现此目的的一种方法是:

a2.index{ |x| !a1.include?(x) }.nil?
Run Code Online (Sandbox Code Playgroud)

有更好,更可读的方式吗?

ruby arrays ruby-on-rails

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

ZSH抱怨RVM __rvm_cleanse_variables:找不到函数定义文件

在Mac OS X 10.7.4上使用最新的ZSH和RVM时,ZSH抱怨这个:

__rvm_cleanse_variables: function definition file not found

ruby macos zsh rvm

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

(一元)*运算符在这个Ruby代码中做了什么?

鉴于Ruby代码

line = "first_name=mickey;last_name=mouse;country=usa" 
record = Hash[*line.split(/=|;/)] 
Run Code Online (Sandbox Code Playgroud)

除了*操作员之外,我理解第二行中的所有内容 - 它在做什么以及文档在哪里?(正如你可能猜到的那样,寻找这个案子很难......)

ruby operators splat

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

"或"和||之间的区别 在Ruby?

Ruby中的运算符or||运算符有什么区别?或者只是偏好?

ruby operators

169
推荐指数
5
解决办法
9万
查看次数

处理rails中STI子类路由的最佳实践

我的Rails视图和控制器上到处是redirect_to,link_toform_for方法调用.有时link_to并且redirect_to在它们链接的路径中是明确的(例如link_to 'New Person', new_person_path),但很多时候路径是隐式的(例如link_to 'Show', person).

我将一些单表继承(STI)添加到我的模型中(比方说Employee < Person),并且所有这些方法都会破坏子类的实例(比如说Employee); 当rails执行时link_to @person,它会出错undefined method employee_path' for #<#<Class:0x000001022bcd40>:0x0000010226d038>.Rails正在寻找由对象的类名定义的路由,即雇员.这些员工路线未定义,并且没有员工控制器,因此也未定义操作.

之前已经问过这个问题:

  1. StackOverflow,答案是编辑整个代码库中link_to等的每个实例,并明确说明路径
  2. 再次在StackOverflow上,有两个人建议使用routes.rb将子类资源映射到父类(map.resources :employees, :controller => 'people').在同一个SO问题中的最佳答案建议使用代码库中的每个实例对象进行类型转换.becomes
  3. StackOverflow的另一个问题,最重要的答案是在Do Repeat Yourself阵营中,并建议为每个子类创建重复的脚手架.
  4. 这里是再次同样的问题在SO,其中顶部的答案似乎只是错误的(Rails的魔法可以工作了)
  5. 在网络的其他地方,我发现了这篇博文,其中F2Andy建议在代码中的任何地方编辑路径.
  6. 在Logical Reality Design 上的单表继承和RESTful路由的博客文章中,建议将子类的资源映射到超类控制器,如上面的SO答案2中所示.
  7. 亚历克斯·赖斯纳有一个帖子在Rails的单表继承中,他主张对映射子类在父类的资源routes.rb,因为只有抓住从路由断裂link_toredirect_to,但不从form_for.所以他建议在父类中添加一个方法,让子类对它们的类​​撒谎.听起来不错,但他的方法给了我错误undefined …

ruby ruby-on-rails single-table-inheritance

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

有没有更好的方法来检查Ruby中的Nil或Length == 0字符串?

是否有比下面更好的方法来检查字符串是否为零或在Ruby中长度为0?

if !my_string || my_string.length == 0
  return true
else
  return false
end
Run Code Online (Sandbox Code Playgroud)

在C#中有方便的

string.IsNullOrEmpty(myString)
Run Code Online (Sandbox Code Playgroud)

有类似于Ruby的东西吗?

ruby

168
推荐指数
9
解决办法
12万
查看次数

如何使用Ruby移动文件?

我想用Ruby移动一个文件.我怎么做?

ruby file

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