Day23 心得体会&读书笔记

一、心得体会
1、今天我完成了什么?

  • 今天完成了Rails guides 5的视图、控制器,大致看了route、扩展、安全等部分
  • 手打一遍application.rb

2、今天我收获了什么?

  • 乐观锁、悲观锁
  • <% %>建立循环,使用<%= %>插入名称
  • :params 占内存
  • I18n

3、今天犯了哪些错误?

  • 快速的翻了一遍Rails guides 5的中文版和英文版,但是事后总结的时候,记不起什么东西了

4、今天的状态如何?

  • 今天状态不错,制定了一天的学习计划,最后快下班的时候迅速把application.rb给写完了

5、明天还要做哪些工作?

  • 明天准备考试
  • 看代码

二、自问自答:

为什么不能用缩进?
编辑器自动转换
为什么要用冒号?
更省内存

三、读书笔记

第三部分 视图

模糊不清的:

  • <% %>建立循环,使用<%= %>插入名称
  • :params的:到底是什么意思呢?
  • 加载所有核心扩展
require 'active_support'
require 'active_support/core_ext'
  • 所有对象皆可使用的扩展

  • blank?和present?

    • nil和false
    • 只有空白的字符串
    • 空数组和空散列
    • 其他能响应empty?方法,而且返回值为true的对象

14.2.5 try

如果只想当对象不为nil时在其调用方法上,最简单的方式是使用条件语句,但这么做把代码变复杂了,你可以使用try方法。

try方法和Object#send方法类似,但如果在nil上调用,返回值为nil。

举个例子:

unless @number.nil
  @number.next
end

简单的写法:

@number.try(:next)

下面的例子摘自ActiveRecord::ConnectionAdapters::AbstractAdapter,实例变量@logger有可能为nil,可以看出,使用try方法可以避免不必要的检查。

def log_info(sql, name, ms)
  if @logger.try(:debug?)
    name = '%s (%.1fms)' %[name || 'SQL', ms]
    @logger.debug(format_log_entry(name, sql.squeeze(' ')))
  end
end

try方法也可接受代码块,仅当对象不为nil时才会执行其中的代码:

@person.try {|p| "#{p.first_name} #{p.last_name}"}

注意,try会吞没没有方法错误,返回nil,如果想避免此类问题,应该使用try!:

@number.try(:nest) # => nil
@number.try!(:nest)

14.3 Module的扩展

14.3.1 alias_method_chain

14.3.2 属性

14.3.2.1 alias_attribute

模型的属性有读值方法、设值方法和判断方法。alias_attribute方法可以一次性为这三种方法创建别名。和其他创建别名的方法一样,alias_attribute方法的第一个参数是新属性名,第二个参数是旧属性名(我是这样的记的,参数的顺序和赋值语句一样):

class User < application
  alias_attribute :login, :email
end

14.3.2.2 内部属性

如果在父类中定义属性,有可能出现命名冲突,代码库一定要注意这个问题。

Active Support提供了attr_internal_reader、attr_internal_writer和attr_internal_accessor三个方法,其行为与Ruby内置的attr_*方法类似,但使用其他方式命名实例变量,从而减少重名的几率。

attr_internal方法是attr_internal_accessor方法的别名:

在上面的例子中,:log_level可能不属于代码库的公开接口,只在开发过程中使用,开发者并不知道潜在的重名风险,创建了子类,并在子类中定义了:log_level,幸好用了attr_internal方法才不会出现命名冲突。

14.3.2.3 模块属性

方法mattr_reader、mattr_writer和mattr_accessor类似于定义的cattr_方法,其实cattr_方法就是mattr_*方法的别名

14.3.3 父级

14.3.3.1 parent
在嵌套的具名模块上调用parent方法,返回包含对应常量的模块:

module X
  module Y
    module Z
    end
  end
end

M = X::Y::Z
X::Y::Z.parent
m.parent

如果匿名模块或位于顶层,parent方法返回Object。

14.4.1 类属性

14.4.1.1 class_attribute

class_attribute方法声明一个或多个可继承的类属性,它们可以在继承树的任一层级覆盖。

class A
  class_attribute :x
end

class B < A; end


class C < B; end

A.x = :a

把:instance_writer选项设为false,不生成设置实例方法:

15.1 Rails中l18n的工作原理

  • 支持英语及类似语言
  • 易于定制和扩展,以支持其他语言

作为这个解决方案的一部分,Rails框架中的每个静态字符串(例如,Active Record数据验证信息、时间和日期格式化)都已国际化,Rais应用的本地化意味着把这些静态字符串翻译为所需语言。

15.1.1 l18n库的总体架构

因此,Ruby I18n gem分为两部分:

  • I18n框架的公开API——包含公开方法的Ruby模块,定义I18n库的工作方式
  • 实现这些方法的默认后端

15.1.2 I18n公开API
I18n API中最重要的两个方法是:

translate # 查找文本翻译
localize # 把日期和时间对象转换为本地格式

这两个方法的别名分别为#t和#l,用法如下:

I18n.t 'store.title'
l18n.l Time.now

对于以下属性,I18n API还提供了属性读值方法和设值方法:

load_path # 自定义翻译文件的路径
locale # 获取或设置当前区域
default_local # 获取或设置默认区域
Exception_handler # 使用其他异常处理程序
backen # 使用其他后端

第 17章 Active Job基础

Active Job框架负责声明作业,在各种队列后端中运行,作业各种各样,可以是定期清理、账单支付和寄信。其实,任何可以分解且并行运行的工作都可以。

17.2 Active Job的作用

主要作用是确保所有Rails应用都有作业基础设施,这样便可以在此基础上构建各种功能和其他gem,而无需担心不同作业运行程序(Delayed Job和Resque)的API之间的差异。此外,选用哪个队列后端只是战术问题。而且,切换队列后端也不用重写作业。

17.3 创建作业

Active Job提供了一个Rails生成器,用于作业。

Rails遵守这样的风格:

  • (缩进)使用两个空格,不用制表符。
  • 行尾没有空白。空行不能有任何空白。
  • 私有和受保护的方法多一层缩进。
  • 使用 Ruby 1.9 及以上版本采用的散列句法。使用 { a: :b },而非 { :a => :b }。
  • 较之and/or,尽量使用&&/||。
  • 编写类方法时,较之 self.method,尽量使用 class << self。
  • 使用 my_method(my_arg),而非 my_method( my_arg ) 或 my_method my_arg。
  • 使用 a = b,而非 a=b。
  • 使用assert_not方法,而非refute。
  • 编写单行块时,较之 method{do_stuff},尽量使用 method { do_stuff }。
  • 遵照源码中在用的其他约定。

英文版的Rails guides 5

Active Record callback

class User < ApplicationRecord
  validates :login, :email, presence: true
 
  before_validation :ensure_login_has_a_value
 
  private
    def ensure_login_has_a_value
      if login.nil?
        self.login = email unless email.blank?
      end
    end
end

如果换成单行,长这样:

class User < ApplicationRecord
  validates :login, :email, presence: true
 
  before_create do
    self.name = login.capitalize if name.blank?
  end
end

什么是I18n?

internationalization i与n之间有18个字母

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • Awesome Ruby Toolbox Awesome A collection of awesome Ruby...
    debbbbie阅读 2,767评论 0 3
  • 一、心得体会 1、我完成了什么? 今天主要看了Rails guides 5的Active Record的3、4、5...
    柳辉阅读 265评论 0 0
  • 一、心得体会1、今天完成了什么今天主要完成了Rails100道考试题的7道 2、今天收获了什么 Rails的缓存有...
    柳辉阅读 377评论 0 0
  • 每天都是美好的一天,开心快乐,不受别人影响。。
    梦在云霄之颠阅读 142评论 0 0