[英]How to extend model in rails 4.2
我有一个用户模型
class User
def fname
@fname
end
def fname=(str)
@fname = str
end
def greeting
"Hello #{@fname}"
end
end
但是我想将greeting
方法移到其他地方,以便我的用户模型不包含业务逻辑。 我该怎么做到这一点? 我尝试在lib中创建一个模块(foo.rb),但它不起作用。 我应该包含在用户模型中吗?
更新的信息:我更新了我的代码
module UserBusinessEntity
def speak(sound)
return "#{sound} is its sound"
end
def greeting
"#{self.id} Hello, #{self.fname} #{self.lname} you are #{self.age} years old"
end
end
class User < ActiveRecord::Base
include UserBusinessEntity
end
这两个代码都在同一个文件中。 ie app/models/User.rb
但我想将module UserBusinessEntity
代码移动到app/services/
我是否必须在用户模型中添加需求。 如果是这样我添加了像require UserBusinessEntity
但它给了uninitialized constant UserBusinessEntity
我相信你可以使用greeting
在视图或邮件中呈现。 所以这是使用演示者的展示。 这里有一篇好文章 。
基本上,定义演示者将是:
应用程序/主持人/ user_presenter.rb
class UserPresenter < DelegateClass(User)
def greeting
"Hello #{fname}"
end
end
有很多方法可以定义,上面只是基本的,详见上面的文章。
然后,您可以在任何地方使用它:
@user = User.first
UserPresenter.new(user).greeting
甚至在一个视图中
example.html.erb
<p><%= UserPresenter.new(user).greeting %><p>
而且,人们可能会用关注来实现这一点,但对我来说这不是一个好习惯!
只需创建一个这样的模块:
module Foo
def greeting
"Hello #{self.fname}"
end
end
然后在您的用户模块中包含该模块:
class User
include Foo
# ...
end
然后你可以调用控制器或视图
@user = User.new
@user.greeting
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.