首页 > 其他 > 详细

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

时间:2018-09-02 12:20:09      阅读:156      评论:0      收藏:0      [点我收藏+]
视频: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()方法

原文:https://www.cnblogs.com/chentianwei/p/9573333.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!