豆知识扩展:
<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
>> 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?
一个非常重要的工具,自动化生成一些文件。生成器是可以客制化的。