Day2 读书笔记&心得体会

一、读书笔记
2.2 Ruby的一些基础知识

  • 先举个Ruby函数的例子:
def say_goodnight(name)
     result = "Good night, " + name
     return result
end
puts say_goodnight('john')
puts say_goodnight('link')

result不用声明,被赋值的时候便存在了。
puts say_goodnight('john')是含有两个方法,say_goodnight('john')这个方法的参数传给puts,puts是显示函数
还有另外一种写法是一样的道理:

puts(say_goodnight('john'))
  • Ruby对单引号处理的少,对单引号字符串有更多的处理,首先,他寻找以反斜杠开始的序列,并用二进制替换他们,其中最常见的是\n,他会被回车符替换掉。举个例子:
puts "good night,\n grandama"

输出:
good night,
grandama

  • Ruby对双引号字符串做的第二件事情是,表达式内插(expression interinterpolation),#{表达式}序列会被“表达式”的值替换,可以用这种方式重写前面的方法。
def say_goodnight(name)
     result = "Good night, #{name}"
     return result
end
puts say_goodnight('john')
puts say_goodnight('link')
  • Ruby构建这个字符串对象时,它找到name的当前值并把它替换到字符串中,任意复杂的表达式都允许放在#{...}结构中,觉个例子:
def say_goodnight(name)
     result = "Good night, #{name.capitalize}"
     return result
end
puts say_goodnight('uncle')

结果:
good night,Uncle

  • 如果表达式是一个全局实例或类变量,则不需要提供花括号。
$greet = "Hello" # $greet是全局变量
@name = "Produce" # @name是实例变量
puts "#$greet,  #$name"
  • 其实,可以进一步简化,把临时变量和return语句拿掉
def say_goodnight(name)
     "Good night, #{name.capitalize}"
end
puts say_goodnight('uncle')

结果是一样的

  • 总结:
    全局变量用美元符号($),实例变量用(@),类变量用两个“at”(@@),最后,类常量、模块名和常量,都必须以一个大写字母开始。

2.3 数组和散列表

  • Ruby的数组和散列表(hashes)是被索引的收集(indexed collection),两者都存储对象的集合,通过键(key)来访问。
  • 数组键只能是整数,散列可以是任意对象。

2.4 控制结构

  • Ruby具有所有常见的控制结构,如if语句和while循环语句
  • 语句修饰符
if dog > 10
    puts "danger, run away!"
end

可以改成这样:

puts "danger, run away!" if dog > 10

while循环语句也是如此

2.5 正则表达式

  • 《精通正则表达式》
  • 正则表达式是对象并且可以当做对象来操作
  • 什么是模式(pattern),句个例子:
    /perl|ython/
    他会匹配perl或Python的字符串
    前面那个斜线界定了模式,模式由要匹配的两个字符串组成,它们被管道符(|)分开,管道符的意思就是要么左边,要么右边。
  • 可以在模式中使用括号:/p(erl|ython)/
  • 也可以在模式中指定重复(repettion),/ab+c/匹配了一个含有a,后面跟着一个或多个b,其后是c的字符串,把模式中的加号改成星号,/ab*c/创建了一个匹配含有a,零个或者多个b然后是c的表达式,
  • 也可以在模式中一组或多组字符,一些常见的字符类(character classes),如\s,它匹配空白字符(空格符,制表符,回车换行符等等);\d,匹配任何数字;\w,匹配会出现在一个词内的任何字符。一个点(.)匹配几乎任意字符。
    可以用它们产生一些有用的表达式:
    /\d\d:\d\d:\d\d/ # 时间 12:34:12
    /Perl.*Python/ # Perl,零个或多个别的字符,然后是Python
    /Perl Python/ # Perl,一个空格和Python
    /Perl *Python/ # Perl,零个或多个空格,和Python
    /Perl +Python/ # Perl,一个或多个空格,和Python
    /Perl\s+Python/ # Perl,空格字符,然后是Python

二、心得体会
今天的收获?一大堆rails函数

  • super 表示调用父类的同名函数,并将本函数的所有参数传入父类的同名函数;
  • split 把对象以某种格式分割成一个数组
  • singularize 复数变成单数
  • remove 以某种格式去掉对象中的元素或者转换对象中的元素位置
  • try 这个整不明白??
  • ActionController::Parameters 动作控制器参数
    为了防止暴露不应暴露的属性,有要求(require)和许可(permit)两种方法,前者用
    于根据需要标记参数,后者用于按照允许的方式设置参数,并限制允许批量更新的属性。

我对代码的理解:

class Admin::ApplicationController < ApplicationController # Admin::Application继承父类Application
  before_action :top_module_for_namespace #在执行这个文件的下面这些代码之前,先执行这行代码,获取顶级module
  before_action :sign_in_required #登陆
  before_action :permission_required #权限验证
  before_action :create_log #建立日志

  def model
    self.class.name.remove(/^Admin|Controller$/).singularize.safe_constantize #去掉类名中的Admin和controller,变成单数,返回
  end
  
  def top_module_for_namespace
    self.class.name.split('::').second.safe_constantize #这个类本身的名称以'::'分割成一个数组,并且第取出二个值
  end

  def sign_in_required
   return if current_user #如果用户已经登陆的话,则返回.....,否则提示无权限,并跳转到登陆页
   respond_to do |format|
      format.html { render template: 'admin/application/sign_in', layout: false }
      format.json { render json: {}, status: :unauthorized }
    end
   end

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

推荐阅读更多精彩内容

  • 一、读书笔记回顾昨天的收获:什么是block、proc? block和proc是两种不同的东西, block有形无...
    柳辉阅读 370评论 0 0
  • 一、读书笔记2.6 Block和迭代器 本节简单描述Ruby的一个独特特性,Block,一种可以和方法调用相关联的...
    柳辉阅读 258评论 0 0
  • 一、心得体会 今天完成了什么 看了20页的镐头书 学了bag的10个controller 收获什么? 新增、编辑都...
    柳辉阅读 337评论 0 0
  • # The Ruby Style Guide > Hey jude, don't make it bad. > T...
    司徒雷斯阅读 312评论 0 2
  • 一、心得体会1、今天主要完成了什么? 今天主要看了互斥、运行多个线程、Ruby调试器、Ruby基础三章 10个co...
    柳辉阅读 253评论 0 0