zoukankan      html  css  js  c++  java
  • (GoRails) 用app/decorators来取代app/helpers; delegate()方法

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

     
    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是传入一个类。
     
     
    user_decorator.view_context生成如:
    #<#<Class:0x00007fe6cd9bf198>:0x00007fe6d2918168>对象,
    这个对象的类是#<Class:0x00007fe6cd9bf198>,
    这个类的父类是ActiveView::Base

    controllers/users_controller.rb

     
     
    需要注意的是因为要在使用content_tag方法,这是ActionView::Helpers中的实例方法。因此需要一个实例。所以使用view_context方法。
    view_context方法:是用ActionView::Rendering#view_context生成的一个view类的实例。
    然后,这个实例可以调用content_tag方法了。
     
     
     
     

     

    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表格中的属性了。


  • 相关阅读:
    spring security几大核心组件
    什么是CSRF攻击?如何避免?
    MyBatis+Oracle实现主键自增长的几种常用方式
    fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题
    Layui我提交表单时,table.reload(),表格会请求2次,是为什么?
    Jquery+ajax模板
    HttpServletRequest和ServletRequest的区别
    java技术基础
    mysql数据库基础
    linux基础03
  • 原文地址:https://www.cnblogs.com/chentianwei/p/9573333.html
Copyright © 2011-2022 走看看