(Gorails) 用decorators来取代helper model; delegate()方法

Posted chentianwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(Gorails) 用decorators来取代helper model; delegate()方法相关的知识,希望对你有一定的参考价值。

视频:https://gorails.com/episodes/decorators-from-scratch?autoplay=1
装饰设置风格:把Model层变的干净,但不使用helper方法。model 只保留scope, has_many等等。
方法:把view中的和数据库关联的逻辑移动到单独设置的一个相关类内。
 

1. 增加app/decorators目录,并在congfig/application.rb中配置为自动加载。

config.autoload_paths += %W( #{config.root}/app/decorators) 

解析: 把[‘‘...根目录/app/decorators"]放入自动加载的目录中。

 
2. 增加一个user_decorator.rb。新增UserDecorator类,这个类取出User数据库的数据,并根据view的需要来增加一系列相关方法。
 
view:
技术分享图片
 
decorators中的类: 
技术分享图片
 
??: 重点是必须初始化2个变量,user存传入的实例对象,view_context是传入一个类。
 
controllers/users_controller.rb
技术分享图片
 
 
需要注意的是因为要在使用content_tag方法,这是ActionView::Helpers中的方法。所以需要一个中介变量:
view_context
它其实是用ActionView::Rendering#view_context生成的一个view类的实例。
 

 

delegate(*methods, to: nil)

Provides a delegate class method to easily expose contained objects‘ public methods as your own.

delegate :first_name, :last_name, :admin?, :moderator?, to: :user

UserDecorator的实例对象可以直接使用User类中的公共方法了。

这里就是@user_decorators可以直接使用 User表格中的属性了。


 

 

 

以上是关于(Gorails) 用decorators来取代helper model; delegate()方法的主要内容,如果未能解决你的问题,请参考以下文章

(GoRails) 自动侦测用户的时区,使用javascript 的jszt库。

ActionCable的部署(参考Gorails)

(GoRails)ActionCable如何用Redis.

洛谷P3018 [USACO11MAR]树装饰Tree Decoration

用HAWQ轻松取代传统数据仓库 —— 大表分区

使用sigaction来取代signal作为信号处理器函数