我正在使用Ruby on Rails 4,我想为属性方法提供更多功能。那就是:
鉴于我有以下模型类
class Article < ActiveRecord::Base
...
end
给定Article
个实例具有以下属性方法
@article.title # => "Sample title"
@article.content # => "Sample content"
然后我想添加Article
功能,如下所示:
class Article < ActiveRecord::Base
def title(args)
# Some logic...
self.title
end
def content(args)
# Some logic...
self.content
end
end
@article.title(args)
@article.content(args)
上述方法是安全/正确/有效吗?我会有问题吗?
答案 0 :(得分:1)
您正在覆盖title
和content
方法,据我所知,此方法根本不安全。比如,拥有getter和setter方法是一个完全不同的故事。但是,这种模式会在一段时间后让您和其他开发人员感到困惑。
如果我是对的(请纠正我,如果我错了,请),你必须得到
wrong number of arguments (0 for 1)
和title
在您所拥有的行号处出现content
错误:
self.title
和self.content
:
@article.title(args)
@article.content(args)
答案 1 :(得分:0)
我建议您阅读7 Patterns to Refactor Fat ActiveRecord Models。你想要的可以是一个很好的装饰者或价值对象。
class Title
def initialize(article)
@article = article
end
def weird_title
some_logic
end
end
当文章weird_title
article_1
时
Title(article_1).weird_title
因此,您可以获得良好的代码分离(OOP样式)并保持模型清洁。