Learn Rails5.2-- chpater2 rails base--

豆知识扩展:

<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 方法先存储一个块并给这个块一个名字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

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



猜你喜欢

转载自www.cnblogs.com/chentianwei/p/9185145.html