码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-02 12:34:43      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:VID   iso   对象   last   esc   mode   exp   图片   from   

视频: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()方法

标签:VID   iso   对象   last   esc   mode   exp   图片   from   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!