"foo_b-6ren">
gpt4 book ai didi

ruby-on-rails - 创建没有参数参数的新 Ruby 字符串助手

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:28 24 4
gpt4 key购买 nike

我真的很难想出如何表达这个问题,但本质上,我想这样做:

model = MyModel.new
model.title = "foo bar"
model.title.to_id #=> "foo_bar"

我有一个 MyModel 的 ActiveRecord 类

class MyModel < ActiveRecord::Base
def to_id(str)
str.downcase.gsub(" ", "_")
end
end

但是,当然,它正在寻找 String 上的 to_id 方法,我不想覆盖字符串,因为我不需要在每个字符串上都有这种行为。只是与 MyModel 关联的字符串。我可以保持简单并做类似的事情:

model.to_id(model.title)

但这不是很像 Ruby。

我知道我以前见过这种方法的例子,但我无法找到它们。

阻止任何人?

最佳答案

您可以使用模块通过方法扩展特定对象实例。

module ToId
def to_id
self.downcase.gsub " ", "_"
end
end

class MyClass
def title=(value)
value.extend ToId
@title = value
end

def title
@title
end
end

m = MyClass.new
m.title = "foo bar"

puts m.title #=> foo bar
puts m.title.to_id #=> foo_bar

由于传入.title=方法的值是一个字符串,当我们用ToId模块扩展string字符串时,模块方法中的“self”就是一个字符串。因此,我们可以直接访问传递给 .title= 方法的字符串,并且可以直接对其进行操作。

这一切都无需直接修改 String 类即可完成。我们只是扩展代表标题的特定实例。

关于ruby-on-rails - 创建没有参数参数的新 Ruby 字符串助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3798148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com