关于Rails
Rails 是使用 Ruby 语言编写的 Web 应用开发框架,目的是通过解决快速开发中的共通问题,简化 Web 应用的开发。与其他编程语言和框架相比,使用 Rails 只需编写更少代码就能实现更多功能。
Rails 哲学两大指导思想:
·不要自我重复(DRY): DRY 是软件开发中的一个原则,意思是“系统中的每个功能都要具有单一、准确、可信的实现。”。不重复表述同一件事,写出的代码才更易维护、更具扩展性,也更不容易出问题。
·多约定,少配置: Rails 为 Web 应用的大多数需求都提供了最好的解决方法,并且默认使用这些约定,而不是在长长的配置文件中设置每个细节。
基本Blog创建
1.新建Rails应用
需安装ruby, rails,SQLite3(mac自带,或者其他数据库)
配置好开发环境后,在Terminal中进入要创建应用的文件夹,使用如下命令创建名为Blog的应用
$ rails new blog
进入创建的文件夹,并用下面命令安装Gemfile 中列出的 gem 及其依赖
$ bundle install
2.启用服务
$ bin/rails server
上述命令启动Rails 默认使用的 Web 服务器Puma。打开浏览器窗口,访问 http://localhost:3000, 查看运行中的应用。Terminal中Ctrl+C停止服务。
3. 控制器(controller)
控制器接受向应用发起的特定访问请求。路由决定哪些访问请求被哪些控制器接收。一般情况下,一个控制器会对应多个路由,不同路由对应不同动作。动作搜集数据并把数据提供给视图。
用下面的命令告创建一个包含“index”动作的“Welcome”控制器
$ bin/rails generate controller Welcome index
其中最重要的文件是控制器和视图,控制器位于 app/controllers/welcome_controller.rb 文件 ,视图位于 app/views/welcome/index.html.erb 文件 。
在编辑器中打开 config/routes.rb 文件。是应用的路由文件,使用特殊的 DSL编写。
设置应用主页:
root 'welcome#index'
控制器中一般按此顺序【index,show,new,edit,create,update 和 destroy】
4.视图(view)
视图以人类能看懂的格式显示数据。数据是在控制器而不是视图中获取的,视图只是显示数据。视图模板默认使用 eRuby编写,经 Rails 解析后,再发送给用户。
5.模型(model)
在 Rails 中,模型使用单数名称,对应的数据库表使用复数名称。Rails 提供了用于创建模型的生成器,大多数 Rails 开发者在新建模型时倾向于使用这个生成器。执行下面的命令创建模型
$ bin/rails generate model Article title:string text:text
6.资源(resource)
资源(resource)表示一系列类似对象的集合。资源中的项目可以被创建、读取、更新和删除,这些操作简称 CRUD(Create, Read, Update, Delete)。
Rails 提供了 resources 方法,用于声明标准的 REST 资源。把 articles 资源添加到 config/routes.rb 文件,此时文件内容应该变成下面这样:
Rails.application.routes.draw do
get 'welcome/index'
resources :articles
root 'welcome#index'
end
用rails routes查看REST 动作都具有对应的路由:
$ bin/rails routes
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
root GET /
7.迁移
rails generate model 命令会在 db/migrate 文件夹中生成数据库迁移文件。迁移是用于简化创建和修改数据库表操作的 Ruby 类。Rails 使用 rake 命令运行迁移,并且在迁移作用于数据库之后还可以撤销迁移操作。迁移的文件名包含了时间戳,以确保迁移按照创建时间顺序运行。
class CreateArticles < ActiveRecord::Migration[5.0]
def change
create_table :articles do |t|
t.string :title
t.text :text
t.timestamps
end
end
end
上面的迁移创建了 change 方法,在运行迁移时会调用这个方法。在 change 方法中定义的操作都是可逆的,在需要时 Rails 知道如何撤销这些操作。运行迁移后会创建 articles 表,这个表包括一个字符串字段和一个文本字段,以及两个用于跟踪文章创建和更新时间的时间戳字段。
用命令rails db:migrate进行迁移
8.健壮参数
使用 require 和 permit 方法
@article = Article.new(params.require(:article).permit(:title, :text))
一般设置为私有,如下:
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :text)
end
9.添加链接
link_to 方法是 Rails 内置的视图辅助方法之一,用于创建基于链接文本和地址的超链接
<%= link_to 'My Blog', controller: 'articles' %>
链接到当前控制器的动作时不需要指定 :controller 选项, Rails 默认使用当前控制器
10.添加验证
验证传入模型的数据
class Article < ApplicationRecord
validates :title, presence: true,
length: { minimum: 5 }
end
Rails 会自动用 div 包围含有错误信息的字段,并为这些 div 添加 field_with_errors类。可以定义 CSS 规则突出显示错误信息。
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
11.添加关联
eg:关联文章和评论:
一篇文章可以有多条评论
class Article < ApplicationRecord
has_many :comments, dependent: :destroy
validates :title, presence: true,
length: { minimum: 5 }
end
每一条评论都属于某一篇文章
class Comment < ApplicationRecord
belongs_to :article
end
在 articles 资源中创建 comments 资源,这种方式被称为嵌套资源
resources :articles do
resources :comments
end
12.安全验证
除了 index 和 show 动作,其他动作都要通过身份验证才能访问
class ArticlesController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]
只有通过身份验证的用户才能删除评论
class CommentsController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secret", only: :destroy