Ruby on rails 新手学习第一天

Ruby on rails 学习第一天:

学习资料:
https://sg552.gitbooks.io/happy_book_rails/content/part3_rails_premier/rails_tutorial_from_view.html
https://www.bilibili.com/video/BV1RJ411W7N3?p=1

学习目标:
学习项目目录设计
知道bundler是什么
学习router. 只学习最常用的restful路由即可. 这里是rails 最最复杂的三大概念之一.路由的作用跟脊柱一样, 把M-V-C这三大块都串联了一起.
学习view.侧重于学习它的 展现方面的知识

学习内容:
1.项目目录设计
1.1app:
assets:包含项目的图片,js,css
controllers:所有要创建controller,如welcome_controller.rb
helpers:放置服务于view的复杂方法,文件命名与controllers相关,如创建controller时会自动创建welcome_helper.rb
mailers:需要发送email的业务逻辑
models:数据库层面的数据模型
views:放置物理页面,创建controller时会自动创建welcome目录,目录内包含对应的controller的action名的erb文件
1.2bin:
当前rails项目中可执行的程序
1.3config:
rails项目的配置文件,包含启动部署初始化的代码
1.4db:
数据库的schema等数据文件
1.5lib:
小的组件或大的模块
tasks:自定义的rake目录
1.6log:
当前rails环境中请求的日志,根据当前运行环境(development,production…)来命名
1.7public:
包含项目的静态图片,js,css,但一般会用管道进入assets中
1.8test:
放置测试用例,测试代码等
1.9tmp:
放置当前缓存,进程id,session数据等
1.10vendor
第三方的rake任务或者资源等
1.11Gemfile
定义项目依赖的gem文件,版本,修改后要bundle install
1.12Gemfile.lock
运行完bundle后bundle内部自身维护依赖关系的文件
1.13Rakefile
加载环境中所有的rake任务

2.bundler是什么?如何使用?
bunlder就是一个rubygem依赖关系的管理工具,它本身就是一个gem,由于RubyGems批处理运行。在配置文件Gemfile里说明你的应用依赖哪些第三方包,他自动帮你下载安装多个包,并且会下载这些包依赖的包。

$ bundle install 前运行 $ bundle config mirror.https://rubygems.org https://gems.ruby-china.com 可以更换镜像源

使用命令bundle update, bundler也能帮你更新你的gem版本,bundle update会去检查Gemfile里gem的更新,然后对比Gemfile.lock文件,如果Gemfile里没有指定版本或是指定是>=的版本,那有新版本就会去安装新的版本的gem,然后更新Gemfile.lock文件,当然不建议随便bundle update,因为全部更新之后可能会产生错误,建议更新单个gem。

3.Routes
位置:位于config/routes.rb 中
作用:规定了特定格式的URL请求到后段controller的action的分发规则
路由的定义是由上而下的,下面的会被上面的覆盖
例子:
GET /users/2
get ‘/users/:id’ , to: ‘users#show’ 或 get ‘/users/:id’ => ‘users#show’
#users是controller,show是users的action,可以通过params[:id]获取id值为2

get ‘/users/:id’ , to: ‘users#show’ , as: ‘user’
user_path(user)
user_path(user.id)
user_url(user)
#命名路由,定义完后可以生成路径和 URL 地址

3.1Resourcesful Routes
RESTful资源设计 *重点
GET - 返回资源详细信息或列表(只读取不修改)
POST - 当前需要对当前URL对应的资源内容进行创建(创建)
PUT / PATCH - 修改资源信息(更新)
DELETE - 删除资源信息(删除)

resources :users
(注意: 不是 resource ) 上面一句,就直接定义了7种路由:
请求方式 URL模式 controller#action 作用
GET /users users#index 显示 user的列表页
GET /users/new users#new 显示 user的新建页面。
GET /users/3 users#show 显示id是3的user
GET /users/3/edit users#edit 显示 user(id =3)的编辑页面。
PATCH/PUT /users/3 users#update 对id = 3的user进行修改 (后面还会紧跟一大串的参数)
POST /users users#create 对users进行创建(后面也有一大堆参数)
DELETE /users/3 users#destroy 对 id=3的 user 进行删除操作。

resource :users
请求方式 URL模式 controller#action 作用
GET /user users#index 显示 user的列表页
GET /user/new users#new 显示 user的新建页面。
GET /user/edit users#edit 显示 user的编辑页面。
PATCH/PUT /user users#update 对user进行修改
POST /user users#create 对user进行创建
DELETE /user users#destroy 对user 进行删除操作。
get ‘profile’ , to ‘users#show’
#resourses默认需要URL传递id,单数资源不需要URL传递id而是POST,比如用户自身的信息编辑页面

namespace :admin do
resources :users
end
#URL controller helper 前缀加上admin/ 或 admin_

resources :users do
resources :blogs
end
#关联关系,用户:博客 = 1:n,path为/users/:user_id/blogs(/…)

resources :users do
member do
post :status
end
collection do
get :online
end
end
#以上代码生成两个路由
#需要id的users#status URL:/users/:id/status(.:format)
#不需要id的users#online URL:/users/online(.:format)
#需要传递id值的是member,不需要传递id值的是collection

3.2Non-Resourcesful Routes
get ‘:controller(/:action(/:id))’
#路由可导向/photos/(show/(1)),show和1为可选
get ‘:controller/:action/:id/:user_id’
#只能匹配/photos/show/1/2
match ‘photos’ => ‘photos#show’
match ‘photos’, to: ‘photos#show’ , via: :all
match ‘photos’, to: ‘photos#show’ , via: [:get, :post]

get ‘/stories’ , to: rediredt(’/articles’)
#重定向

root to: ‘pages#main’
root ‘pages#main’
#根目录

4.View
ActionView:actionview gem
ActionController:actioncview gem
命名:index.html.erb
index:action对应的名称 / partial名称
html:输出文件类型
erb:解释引擎
目录:app/views/
分类:
Template:index.html.erb
Partial:_user.html.erb
Layouts:application.html.erb
<% %> #没有输出,用于判断循环遍历赋值
<%= %>#用于输出内容
<% @users.each do |user| %>

<%= user.username %>


<% end -%> # -可以不输出换行符

4.1Render
作用:生成HTTP response,渲染和解释子视图

Render in controller
1.修改action的查找view行为,组建当前request的response
#def search
#render action: :index
#在search中返回index的view
2.返回数据(一个action只能运行一次render)
#render text: ‘ok’
#render json: @users
#render xml: @users
#render file: ‘app/views/users/index’
#render partial: ‘app/views/users/search’ 实际上是搜索_search.html.erb

例子:
render :edit
render action: :edit
render “edit”
render “edit.html.erb”
render action: “edit”
render action: “edit.html.erb”
render “books/edit”
render “books/edit.html.erb”
render template: “books/edit”
render template: “books/edit.html.erb”
render “/path/to/rails/app/views/books/edit”
render “/path/to/rails/app/views/books/edit.html.erb”
render file: “/path/to/rails/app/views/books/edit”
render file: “/path/to/rails/app/views/books/edit.html.erb”
render plain: “OK”
render html: “Not Found”.html_safe

Render in view
1.渲染子视图sub-view
#app/views/users/index.html.erb
#app/views/shared/_menu.html.erb
<%= render “shared/menu” %>

Products

Here are a few of our users:

... 2.传参数 <%= render "shared/menu" %> = <%= render partial: "shared/menu" %> <%= render "shared/menu", locals: { var_1: 'value_1' } %> 3.遍历输出 <% @users.each do |user|%> <%= render partial: "shared/menu", locals: { user: user } %> <% end -%> 或 <%= render "one_user" , collection: @users, as: :user %>

4.2Layouts
#app/views/layouts/application.html.erb

... <%= yield %> ... #app/controllers/users_controller.rb class UsersController < ApplicationController layout 'application' def index #... end end

4.3Helper Methods
基础的方法:
image_tag(“rails.png”) # => Rails
image_path(“rails.png”) # => assets/rails.png

javascript_include_tag(“application”) #=>

stylesheet_link_tag “application” #=> </ link>>

<% benchmark “Process data files” do %>
<%= expensive_files_operation %>
<% end %>
#用于性能测试,日志中会增加"Process data files(0.34523)"

<% cache do%>
<%= render “shared/footer” %>
<% end %>
#Fragment Cache 针对一个片段的缓存

<% @greeting = capture do %>

Welcome


<% end %>
#定义greeting为某段html
<%= @greeting %>
#输出html

distance_of_time_in_words(Time.now, Time.now + 15.seconds)
#=> less than a minute (一天前,十五分钟前等人性化描述语句)
distance_of_time_in_words(Time.now, Time.now + 15.seconds, include_seconds: true)
#=> less than 20 seconds (进行单位定制)

number_to_currency(1234567890.50) # =>$1,234,567,890.59
number_to_human_size(1234) # =>1.2 KB
number_to_human_size(1234567) # =>1.2 MB
number_to_percentage(100, precision: 0) # =>100%
number_to_phone(12345551234) # =>123-555-1234
number_with_delimiter(12345678) # =>12,345,678
number_with_precision(111.2345) # =>111.235
number_with_precision(111.2345, 2) # =>111.23

更多方法查看:https://ruby-china.github.io/rails-guides/form_helpers.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值