[英]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.