豆知识扩展:

<meta> 

https://www.cnblogs.com/chentianwei/p/9183799.html

css selector

div > p 选择所有父母是<div>的<p>元素。

div p 选择所有在<div>内的<p>元素。

个人理解 div.dialog特指类名是dialog的<div>元素


public

文件夹下的html文件是静态网页,通过http://localhost:3000/hello-world.html.可以在浏览器打开。也可以不加上.html,rails默认自动增加html在url尾部。

这个网页没有集成rails 框架。

用途:可以在Rails当前没有工作的适合使用这个网页。在产品环境下,你通常把经典的服务器放在rails server之前,从public目录可以自动的发送静态文件。


使用erb来创建动态dynamically的 HTML

生成一个controller 加一个方法test:

rails g controller example test

因为自动生成了route, get ''example/test", 所以通过example/test路径进入view的网页。

⚠️,在public中的静态文件优先级高于router.rb中的配置路径。如果有同名的目录和文件。会优先使用public中的。比如:

同时有app/views/example/test.html.erb和public/example/test.html会优先使用后者。

<%= %> 会把输出转化为string。使用to_s。


豆知识

yield

在 layouts目录中 ,可以设置不同的layouts。但如何引用进来,以前学习过,现在忘记了!

http://guides.rubyonrails.org/layouts_and_rendering.html#using-nested-layouts

guide里有内嵌套layout.

需要使用ActionView::Helpers::CaptureHelper#content_for()方法和content_for()?

content_for 方法先存储一个块的markup标记,并给这个块一个名字identifier。

然后,就可以使用这个块在一个模版的任意位置引用,或者其他的模版templates, layout或者module中了。

用法,通过传递identifier作为content_for()的参数,即:content_for(:identifier) ,也可以使用yield(:identifier)

⚠️yield(:indentifier)不能在模块内使用。


Partial:

使用render 渲染局部模版。ActionView::PartialRenderer#render

例子:

<%= render partial: "account", locals: { account: @buyer } %>

之后在_accouont.html.erb中就可以使用局部变量account了。

相当于使用了as别名。

Partial 可以传递局部变量,集合。

Paritial同样可以使用不同的布局文件。

render partial: "account", layout:"admin", locals: {account: @admin}

render partail: "account", layout:"edit", locals: {edit: @edit}

_account.hmtl.erb使用了_admin.html.erb或者_edit.html.erb文件作为布局文件,它们都在同一个文件夹。

如果传递的是一个conllection: @users。则每个user都会渲染一次partial。

另外, locals中的变量既可以被partial使用,也可以被layout使用。

⚠️:locals还可以带一个块。


rails console

2.5.1 :002 > Rails.env
 => "development"
2.5.1 :004 > Rails.root
 => #<Pathname:/Users/chentianwei/下载的书籍/Learn Rails 5.2(基础书籍)/testproject>

>> app.url_for(controller: 'game', action: 'ping')
=> "http://www.example.com/game/ping"

>> app.get '/game/ping'
Started GET "/game/ping" for 127.0.0.1 at 2018-01-17 17:14:50 +0100

   (0.2ms)  SELECT "schema_migrations"."version" FROM "schema_migrations"
ORDER BY "schema_migrations"."version" ASC
Processing by GameController#ping as HTML
  Rendering game/ping.html.erb within layouts/application
  Rendered game/ping.html.erb within layouts/application (54.4ms)
Completed 200 OK in 898ms (Views: 884.8ms | ActiveRecord: 0.0ms)

=> 200


What Is a Generator?

http://guides.rubyonrails.org/generators.html

一个非常重要的工具,自动化生成一些文件。生成器是可以客制化的。


Debugging (看文档)

http://guides.rubyonrails.org/debugging_rails_applications.html#debug

RAils提供了一系列debug工具来显示开发者的早期的工作。

  • debug(object)方法ActionView::Helpers::DebugHelper#debug用于在视图中显示某个对象的属性信息。它会使用YAML格式渲染对象并在一个<pre>标签内返回信息。
  • 如:<%= debug @article %>

web console

一个rails 自带gem 'web-console'。和byebug类似,但是是在浏览器中运行。

只能在开发环境加载gem。在view/page 上输入<% console %>,刷新网页底部出现控制台。

也可以在controller的某个方法内加上console 。

这个console执行纯ruby代码。可以定义和实例化客制的类,创建新的models和检测变量。

教材上包含:安全政策的设置

在confilg/initializers/content_security_policy.rb中取消部分注释,作者说这是比较脏的快捷方法 。只能在开发环境使用。

Rails.application.config.content_security_policy do |policy|
#   policy.default_src :self, :https
  policy.font_src    :self, :https, :data
  policy.img_src     :self, :https, :data
  # policy.object_src  :none
#   policy.script_src  :self, :https
  policy.style_src   :self, :https
 
#   # Specify URI for violation reports
#   # policy.report_uri "/csp-violation-report-endpoint"
end

The Logger

在运行时,储存信息到log文件是很重要的。Rails为不同的运行环境保留了各自的日志文件。

什么是Logger?

ActiveSupport::Logger类,写log信息。

Log Levels

有不同的等级 debug, info, warn ,error, fatal ,unknow.对应0-5

发送信息

写当前log,使用logger.(debug|info|warn|error|fatal)方法,在一个controller, model或mailer中。

class ArticlesController < ApplicationController
  # ...
 
  def create
    @article = Article.new(article_params)
    logger.debug {"New article: #{@article.attributes.inspect}"}
    logger.debug {"Article should be valid: #{@article.valid?}"}
 
    if @article.save
      logger.debug {"The article was saved and now the user is going to be redirected..."}
      redirect_to @article, notice: 'Article was successfully created.'
    else
      render :new
    end
  end

之后在日志中就会有相关信息在rails server窗口显示并记录进log中:

New article: {"id"=>nil, "title"=>"Debugging Rails", "body"=>"I'm learning how to print in logs!!!", "published"=>false, "created_at"=>nil, "updated_at"=>nil}
Article should be valid: true

日志是用于监控用户行为的! 属于安全领域,比如黑客恶意攻击的行为,可能就会被记录下来。


Debugging with the bybbug gem

当你的代码没有按照期待的方式运行,你可以打印信息到logs或者使用web console, 或者用debug(object)来查找错误。

不过有时候错误足迹的类型在查找问题引起的根源的时候,不是很有效。 当你实际需要走进运行的源代码时,debugger是一个好的gem.

1 Setup

gem install byebug。(2000✨)

之后可以在任何位置插入byebug,比如测试时,或者在某个类中,运行时就会暂停, 见rails server窗口:

[1, 8] in /Users/chentianwei/下载的书籍/Learn Rails 5.2(基础书籍)/testproject/app/controllers/example_controller.rb
   1: class ExampleController < ApplicationController
   2:   def test
   3:     byebug
=> 4:     @current_time = Time.now
   5:   end
   6:
   7:
   8: end
(byebug)

使用help见到许多方法。continue是继续。pasting

https://github.com/deivid-rodriguez/byebug

 

输入instance_variables 可以看到当前的实例变量名字。如果使用next进入下一步,再输入instance_variables就是此时的实例变量。是根据进程变化的。

输入var.弹出帮助信息,可以选择all, args, const ,local, instance等,如输入var instance

则列出所以此时的实例变量和它的值。

(byebug) var local
self = #<ExampleController:0x00007fefd8c23c40>
(byebug) var instance
@_action_has_layout = true
@_action_name = "test"
@_config = {}

...

这是非常帮的方法,用来检测当前环境上下文的变量。

也可以检测一个对象的方法:var instance Article.new 会显示这个新建对象的所有方法。

可以display @articles显示 1:@articles = nil

next命令是下一行。

step命令是前进到下一个frame。

breakpoint

不论何时碰到breakpoint ,都可以让你的程序暂停。

你可以在rails server窗口内动态的增加,删除breakpoint。

  • break n:在第n行设置断点
  • 还可以在某个文件,或类的方法上设置断点。

info breakpoints显示断点信息。

delete n删除断点

continue继续执行,任何断点都会pass。

可以和pry-byebug一起使用。

https://github.com/deivid-rodriguez/byebug

Learn Rails5.2-- rails base(含官方指导Debugging 摘录)的更多相关文章

  1. TrinityCore3.3.5编译过程-官方指导-踩坑总结

    官方指导:主页->how to compile -> windows 指导文档写得很详细,但有不少细节点没提到,这里把过程简化总结,说明重点,及易坑点 1,安装需求 编译工具:cmake, ...

  2. Learn Rails5.2- Scaffolding and REST,flash.now, flash.keep; Access via JSON

    用generator建立一个手脚架 Representational State Transfer (REST).  具像的状态转存. https://en.wikipedia.org/wiki/Re ...

  3. Learn Rails5.2- ActiveRecord: Migration , spring的使用(不兼容的解决办法)

    偶然一次: 运行rails generate停止不动,网上查找答案,可能是bundle update 之后 spring 版本变化了,和正在运行的 spring 实例不兼容. Spring导致的同样的 ...

  4. openstack官方指导书

    openstack官方网站:https://docs.openstack.org/ 由于openstack的官方文档有点多,所以这里对其进行梳理一下 Release Notes 发布版本 新功能,升级 ...

  5. saltstack手册(含官方pdf)

    官方手册 https://docs.saltstack.com/en/pdf/Salt-2019.2.1.pdf 快速入门 SALTSTACK是什么? Salt是一种和以往不同的基础设施管理方法,它是 ...

  6. Learn Rails5.2 Bundler ; Forms

    如果一个Rubyer想要提供一个功能或某个程序或程序的集合给其他Rubyer使用,这个Rubyer可以创建一个package,这个package就叫做gems. 可以通过gem install安装. ...

  7. Learn Rails5.2- ActiveRecord: sqlite3的用法, Query查询语法。乐观锁和悲观锁案例,查询语法includes(), 多态关联,destory和delete, Scope, Validats, Migrations

    rails generate model photo title:string album:references 这会产生一个album_id列,当建立belongs_to关联时,需要用到. refe ...

  8. Learn Rails5.2 Routes。( 很少用到的参数:constraints和redirect)

    Naming a Route get 'home/index', as: "different_name" 会得到prefix: different_name代替home_inde ...

  9. Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET

    OSNIT_百度百科 Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET Salt Stack 官方文档翻译 分类: 自动运维 2013-04-02 11 ...

随机推荐

  1. Oracle下where子句

    课外题 要求:删除某一个用户,同时保留该用户的数据?如何解决 alter user scott account lock :改天需要使用则解锁unlock 锁定用户使用sysdba登录还是可以查看数据 ...

  2. Oracle表的维护(字段,重命名表名)

    案例:银行里建的开卡信息 字段 字段类型 Id Number name Varchar2(64) sex Char2() birth Date money Number(10,2) 创建银行卡表 cr ...

  3. opencv学习笔记——FileStorage类的数据存取操作

    OpenCV的许多应用都需要使用数据的存储于读取,例如经过3D校准后的相机,需要存储校准结果矩阵,以方便下次调用该数据:基于机器学习的应用,同样需要将学习得到的参数保存等.OpenCV通过XML/YA ...

  4. hihoCoder_1449_后缀自动机三·重复旋律6

    #1449 : 后缀自动机三·重复旋律6 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  5. 转载:Why using Single Root I/O Virtualization (SR-IOV) can help improve I/O performance and Reduce Costs

    Introduction While server virtualization is being widely deployed in an effort to reduce costs and o ...

  6. 12.GIT多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 查看远程库的信息 $ git remote origin $ ...

  7. yum whatprovides 查找哪个包可以提供缺失的文件

    yum whatprovides 查找哪个包可以提供缺失的文件

  8. Elasticsearch环境安装配置

    安装Elasticsearch的步骤如下 - 第1步 - 查看安装在计算机上的java的最低版本,它要求java 7或以上或最新的版本.可以通过执行以下操作进行检查 - 在Windows操作系统(OS ...

  9. 国内比特币bitcoin交易平台

    火币网:   www.huobi.com 比特币中国:   www.btcchina.com okcoin:    www.okcoin.cn 中国比特币:   www.chbtc.com 比特币交易 ...

  10. 第六章并发编程,异步执行框架executor

    异步执行框架executor是一个接口,只有一个方法.接受一个Runnable做为参数,执行任务. 将任务的执行与提交解耦. 1:executor package java.util.concurre ...