rails
写这篇博客的原因是国科大高级软件工程(罗老师的课)需要用ruby on rails,在rails入门时,rails官方指南(建一个简易博客)的英文读着吃力所以想一边翻译该指南,一边学习,中间因为有考试就停了一段时间,也就没翻译完,后来看到ruby-China的网站在这个链接https://ruby-china.org/topics中有rails教程https://rails.guide/book/getting_started.html#getting-started-with-rails,教程中的第一章就是本文的建一个简易博客教程(中文版),大家可移步这里学习,这篇博客不会再更新了。(祝大家学习顺利,早日成为编程好手,看到博客还有80+的浏览量,对我是一个很好的鼓励,谢谢!)
学习rails官方指南,建一个简易博客,指南地址:http://guides.rubyonrails.org/getting_started.html,这个指南包含的内容为ruby on rails的安装和运行,学习指南后你将知道:
1怎样去安装rails,怎样建立一个rails应用,怎样把应用和数据库关联;
2rails应用的一个大体布局(layout);
3MVC(Model-模型、View视图、controller控制器)架构和RESTful架构的基本原则;
4怎样快速生成rails应用程序的起始部分(starting pieces);
1指南的前提:
本指南为想要从头开始(from scratch)使用rails应用程序的初学者而设计的。不需要你对rails有任何先前的经验。但是,要充分利用它,您需要安装一些先决条件:
1ruby语言版本2.2.2或更新版本的;
2如果用的是windows系统,需要正确版本的Development Kit;
3RubyGems包,ruby语言已默认安装;
Rails是一个运行在Ruby编程语言上的Web应用程序框架。如果你之前没有ruby经验,你会发现直接学习rails将是一个非常陡峭的曲线(比较难),下面是几个学习ruby的在线资源列表:
- Official Ruby Programming Language website
- List of Free Programming Books
要知道,有些资源,尽管还很棒,包括ruby1.6、1.8版本,将不会在包含因日益发展而出现在rails中的一些新语法规则;
2 什么是Rials
rails是一个用ruby语言写成的web应用开发框架.他的目的是让web应用的编程开发过程更简单,通过猜想大部分开发者在开始阶段需要写什么东西。和其他语言和框架相比,他让你能够写更少的代码的同时,能够实现更多工作。有经验的rails开发者说他也让web应用开发更加有趣。
rails是一个有主见的软件。他设想有一些最好的做事的方法,并且他被设计成鼓励这种方式-在一些情况下不鼓励有其他选择。如果你学习了“The Rails Way”,你可能会发现生产力的巨大提高。如果你坚持吧其他旧有的语言习惯带进rails开发中,并且尝试使用你在其他地方学习到的模式,你将经历一个不太开心的体验。
rails哲学包含两个主导原则:
1不要模仿你自己(DRY):DRY是一个软件开发原则,阐明了:每一片知识在一个系统内都有一个单独的、明晰的、权威的表述(representation)。不要把相同的信息一遍又一遍的重复,这样我们的代码才能更好的维护、更具有扩展性、更少bug。
2convention over configuration(约定配置):rails有关于web应用中怎样最好地做一些事情的主见,并默认这一套公约(convention),而不是要求你通过无尽的配置文件(configuration files)指定细节(specify minutiae)。
3创建一个新的rails项目
阅读这个指南的最好方法是一步一步跟着做。所有步骤对于运行这个样例项目都是至关重要的,并且不再需要有额外的编码或步骤。
通过跟随这个指南,你将创建一个称作blog的rails项目,一个(非常)简单的weblog。在你开始建立这个应用之前,你需要确保你已安装Rials。
下面的例子用$
来表示你的类-UNIX操作系统(UNIX-like OS)的终端提示,尽管他可能被定制(customized)成以不同的方式出现。如果你用的是windows操作系统,你的提示会看起来像c:\source_code>
3.1安装rails
打开命令行,任何命令都会以一个美元符号$开头,这些命令都应该在命令行中执行。确认你有一个当前版本的ruby:
$ ruby -v
ruby 2.3.1p112
许多类-UNIX系统都装配有一个能够接受的SQLite3,确认你已经在你的路径中正确安装了sqlite3
$ sqlite3 --version
程序应报告他的版本
安装rails(不赘述了)
3.2创建blog应用
rails带有一些称作generator(生成器)的脚本,他们被设计用来使你的开发周期更简单,通过为开始处理一个特定任务所需要的一切来达成这一目的。其中一个是新应用generator,他将为你提供一个新rails应用的一个基础,这样你就不用自己去写了。
要使用这个generator,打开一个终端,切换到一个你有权限创建文件的目录下,并打出命令:
$ rails new blog
这将在blog目录下创建一个称作blog的rails应用,并且安装在Gemfile中提到的gem依赖,用命令:bundle install
您可以通过运行rails new -h来查看Rails应用程序构建器(rails APPlication builder)接受的所有命令行选项。
建立了blog应用之后,切换到他的文件夹下:
$ cd blog
blog目录下有一些自动生成的文件和文件夹,他们组成了一个rails应用的结构。这个教程里的大多数工作都会在这个文件夹里进行,但是下面是Rails默认创建的每个文件和文件夹的基本(basic rundown基本的概要)功能:
file/folders(文件/文件夹 | 目的 |
app/ | 包含了程序的控制器(controller)、模型(model)、视图(view)、mailers, channels, jobs 和 assets本指南的其余(remainder)部分将重点介绍此文件夹。 |
bin/ | 包含启动您的应用程序的rails脚本,并且可以包含用于设置,更新,部署(deploy)或运行应用程序的其他脚本。 |
config/ | config/配置您的应用程序的路由,数据库等。这在配置Rails应用程序中有更详细的介绍。 |
config.ru | 用于启动应用程序的基于Rack的服务器的Rack配置。 |
db/ | 包含您当前的数据库模式(schema)以及数据库迁移(migrations)。 |
Gemfile Gemfile.lock |
这些文件允许您指定Rails应用程序需要哪些gem依赖项。这些文件由Bundler gem使用。有关Bundler的更多信息,请参阅Bundler网站。 |
lib/ | 为您的程序扩展模块 |
log/ | 应用程序日志文件 |
public/ | world as-is唯一能看到的文件夹。包含静态文件和编译的资产(assets)。 |
Rakefile | 该文件定位并加载可以从命令行运行的任务。任务定义在整个Rails组件中定义。不要改变Rakefile,你应该添加你自己的任务,把文件添加到应用程序的lib / tasks目录下。 |
README.md | 这是您的应用程序的简要说明手册。 你应该编辑这个文件来告诉别人你的应用程序做了什么,如何设置,等等。 |
test/ | 单元测试,fixture和其他测试仪器apparatus。这些都在测试Rails应用程序中介绍。 |
tmp/ | 临时文件(如缓存(cache)和pid文件) |
vendor/ | 所有第三方代码的地方。 在典型的Rails应用程序中,这包括了gems. |
.gitignore | 这个文件告诉git应该忽略哪些文件(或模式)。 请参阅Github - 忽略文件以获取有关忽略文件的更多信息。 |
4Hello Rails
首先,讓我們快速在屏幕上看到一些文字。要實現這個目的,你需要让你的Rails应用服务器运行起来。
4.1启动Web服务器
你实际桑已经有了一个功能性的Rails应用,要想看见他,你需要在你的开发机器(电脑)上启动一个Web服务器,你可以通过在Blog目录中运行下面这个命令来实现这一操作:
$ bin/rails server
这将启动Puma,一个默认情况下使用的由Rails分配的Web服务器。要查看您的应用程序,请打开浏览器窗口并导航到http:// localhost:3000。你应该看到rails的默认信息页面。
在其运行的终端窗口敲击Ctrl+C可以关闭该服务器。若服务器已经停止,您应该能再次看到您的命令提示符光标。对于大多数类-UNIX系统,包括MacOS,意味着将会出现一个美元标志$。在开发模式(development mode)下,Rails通常(generally)不会要求您重新启动服务器;您在文件中所做的更改将被服务器自动提取(pick up)。
“欢迎登机”(welcome aboard)页面是新的Rails应用程序的冒烟(smoke)测试:它确保您的软件配置(configured)正确,足以提供页面(server a page)。
4.2Say "Hello", Rails
为了让Rails说“你好”,你至少需要创建(create at Minimum至少创建)一个控制器和一个视图。
控制器的目的是为了接受应用程序的特定请求(specific requests)。路由(Routing)决定哪个控制器接收哪些请求。通常情况下,每个控制器有多个路由,不同的路由可以通过不同的动作(action)来服务。 每个动作的目的是收集信息以提供一个视图。
视图的目的是以可供人们阅读的格式显示这些信息。 一个重要的区别是:是控制器收集信息,而不是视图。 该视图应该只显示该信息。 默认情况下,视图模板(view templates)是用eRuby(Embedded Ruby)语言编写的,在被发送给用户之前,Rails中的请求循环会处理这个语言。
要创建新的控制器,你需要运行“controller(控制器)”生成器,并告诉他你想要一个称作“Welcome”的控制器,并带有一个“index”动作,就像这样:
$ bin/rails generate controller Welcome index
rails将为你创建一些文件和一个路由
create app/controllers/welcome_controller.rb
route get 'welcome/index'
invoke erb
create app/views/welcome
create app/views/welcome/index.html.erb
invoke test_unit
create test/controllers/welcome_controller_test.rb
invoke helper
create app/helpers/welcome_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/welcome.coffee
invoke scss
create app/assets/stylesheets/welcome.scss
其中最重要的是控制器(位于app / controllers / welcome_controller.rb)和视图(位于app / views / welcome / index.html.erb)。
在文本编辑器中打开app / views / welcome / index.html.erb文件。 删除文件中的所有现有代码,并用下面的一行代码替换它:
<h1>Hello, Rails!</h1>
4.3设置应用程序主页
现在我们已经制作了控制器和视图,我们需要告诉Rails我们何时需要“Hello,Rails!”。 在我们的例子中,我们希望在导航到我们网站的根URL(http:// localhost:3000)时显示它。 目前,“欢迎登机”(welcome aboard)正在占据这个地方。
接下来,你必须告诉Rails你的实际主页(actual home page)在哪里。
在编辑器中打开文件config / routes.rb。
Rails.application.routes.draw do
get 'welcome/index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
这是您的应用程序的路由文件,其中包含特定DSL(域特定语言domain-specific language)中的条目(entries),这些条目告诉Rails如何将传入请求连接到控制器和操作。 编辑这个文件,加入一行代码root'welcome#index'。 它应该看起来如下所示:
Rails.application.routes.draw do
get 'welcome/index'
root 'welcome#index'
end
root 'welcome#index'告诉Rails将应用程序根目录的请求(即http:// localhost:3000)映射(map request)到welcome控制器的index操作(action),get 'welcome / index'告诉Rails将http:// localhost:3000 / welcome / index请求映射到welcome控制器的index操作(action)。后者是在运行controller生成器(bin / rails generate controller Welcome index)时创建的。
http:// localhost:3000 / welcome / indexwelcomecontroller的index操作http:// localhost:3000
两次映射操作
重新启动Web服务器(如果你停了他的话)以生成控制器,并在浏览器中导航到http:// localhost:3000。 你会看到你放入app / views / welcome / index.html.erb中的消息:“Hello,Rails!” ,这表示这个新路由确实将进入WelcomeController的index操作并正确地呈现视图。
5getting up and running
现在你已经看到了如何创建一个控制器(controller),一个动作(action)和一个视图(view),让我们创建一个更实质(substance)的东西。
在blog应用程序中,你将创建一项新的资源(resource),资源是用来描述相似对象的集合的一个术语,比如文章、人或动物。你可以对资源的项目(item)进行创建、读取、更新和销毁操作,这些操作被称为CRUD操作。
Rails提供了一个资源方法,可以用来声明一个标准的REST资源。您需要将文章资源添加到config / routes.rb,文件便如下所示:
Rails.application.routes.draw do
get 'welcome/index'
resources :articles
root 'welcome#index'
end
如果您运行bin / rails routes(这个命令我执行的时候没有成功,ERROR: command 'routes' not recongized),您将会看到它已经为所有标准的RESTful操作定义了路由。 前缀列(和其他列)的含义将在稍后看到,但现在注意到,Rails已经推断出单数形式的文章,并有意义地使用了区分。
$ 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 / welcome#index
在下一节中,您将添加在应用程序中创建新文章并能够查看它们的功能。 这是来自CRUD的“C”和“R”:创建和读取。 这样做的形式如下所示:
现在看起来有点基本(basic),但没关系。 之后我们会考虑改进它的样式。
5.1Laying down the groundwork
首先,您需要在应用程序中创建一个新文章。 一个好的地方是/article/new。 通过已经定义的路线,现在可以在应用程序中对/ articles / new进行请求。 导航到http:// localhost:3000 / articles / new,您将看到路由错误:
发生此错误是因为路由需要定义一个控制器以便为请求提供服务。 解决这个问题很简单:创建一个名为ArticlesController的控制器。 你可以通过运行这个命令来做到这一点:
$ bin/rails generate controller Articles
如果你打开新生成的app / controllers / articles_controller.rb,你会看到一个相当空的控制器:
class ArticlesController < ApplicationController
end
控制器只是一个定义为从ApplicationController继承的类(class)。 在这个类里面,你将定义一些方法(method),这些方法将成为这个控制器的动作(action)。 这些操作将对我们系统内的文章执行CRUD操作。
Ruby中有公共,私有和受保护的方法,但只有公共方法可以是控制器的操作。 有关更多详细信息,请查阅Programming Ruby。
如果你现在刷新http://localhost:3000/articles/new 你将得到一个新的错误:
这个错误表明Rails在你刚才生成的ArticlesController里面找不到新的动作。 这是因为当在Rails中生成控制器时,默认情况下它们是空的,除非在生成过程中将其告诉您所需的操作。
要在控制器中手动定义一个动作,您只需要在控制器中定义一个新的方法。
打开app/controllers/articles_controller.rb,在ArticlesController类中,定义新的方法,以便你的控制器现在看起来像这样:
class ArticlesController < ApplicationController
def new
end
end
使用ArticlesController中定义的新方法,如果刷新http:// localhost:3000 / articles / new,则会看到另一个错误:
你现在得到了这个错误,因为Rails希望像这样的简单的动作有与他们相关的视图来显示他们的信息。 没有可用的视图,Rails会引发异常。
在上图中,底线已被截断。 我们来看看完整的错误信息:
ArticlesController#new缺少此请求格式和变体的模板。 request.formats:[“text / html”] request.variant:[]注意! 对于XHR / Ajax或API请求,此操作通常会以204No content:空的白色屏幕进行响应。 由于您正在将其加载到网络浏览器中,因此我们假定您期望实际渲染模板,而不是......Nothing,所以我们显示的错误是非常明显的。 如果你期望204No Content,继续。 这就是你会从XHR或API请求中获得的。 试一试。
这是相当多的文字!让我们快速浏览并理解它的每个部分是什么意思。
第一部分标识哪个模板丢失。在这种情况下,这是articles/new模板。 Rails将首先寻找这个模板。如果找不到,则会尝试加载名为application / new的模板。它在这里寻找一个,因为ArticlesController继承自ApplicationController。
消息的下一部分包含request.formats,它指定了作为响应的模板的格式。它被设置为text / html,因为我们通过浏览器请求了这个页面,所以Rails正在寻找一个HTML模板。 request.variant指定响应将使用哪种物理设备,并帮助Rails确定在响应中使用哪个模板。这是空的,因为没有提供任何信息。
在这种情况下最简单的模板将位于app / views / articles / new.html.erb。这个文件名的扩展名是很重要的:第一个扩展名是模板的格式,第二个扩展名是用于渲染模板的处理程序。 Rails试图在应用程序的app / views中找到一个叫articles / new的模板。这个模板的格式只能是html,HTML的默认处理程序是erb。 Rails使用其他处理程序来处理其他格式。构建器处理程序用于构建XML模板,咖啡处理程序使用CoffeeScript来构建JavaScript模板。既然你想创建一个新的HTML表单,你将会使用ERB语言,这个语言被设计用来将Ruby嵌入到HTML中。
因此该文件应该被称为articles / new.html.erb,并且需要位于应用程序的app / views目录中。
现在继续,在app / views / articles / new.html.erb上创建一个新文件,并在其中写入这个内容:
<h1>New Article</h1>
当你刷新http:// localhost:3000 / articles / new时,你现在会看到该页面有一个标题。 路由,控制器,action和view现在运作和谐! 现在是为新文章创建表单的时候了。
5.2 The first form(第一个表单)
要在此模板中创建表单,您将使用表单构建器。 Rails的主要表单生成器是由一个名为form_with的助手方法提供的。 要使用此方法,请将此代码添加到app / views / articles / new.html.erb中:
<%= form_with scope: :article, local: true do |form| %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
如果您现在刷新页面,则会看到与上述示例完全相同的表单。在Rails中构建表单实际上就是这么简单!
当你调用form_with的时候,你会为它传递一个确定的范围。在这种情况下,它是符号:article。这告诉form_with助手这是什么形式。在此方法的块内部,FormBuilder对象(由form表示)用于构建两个标签和两个文本字段,分别用于文章的标题和文本。最后,调用表单对象将会为表单创建一个提交按钮。
这个表单有一个问题。如果您检查生成的HTML,通过查看页面的源代码,您将看到表单的action属性指向/ articles / new。这是一个问题,因为这个路径转到您目前正确的页面,而该路线只能用于显示新文章的表单。
该表单需要使用不同的网址(URL)才能去其他地方。这可以通过form_with的url选项来完成。通常在Rails中,用于这种新形式提交的操作称为“创建”,因此表单应指向该操作。
编辑app / views / articles / new.html.erb中的form_with行,如下所示:
<%= form_with scope: :article, url: articles_path, local: true do |form| %>
在这个例子中,articles_path helper被传递给:url选项。 要了解Rails将如何处理,我们回头看看bin / rails的输出:
$ 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 / welcome#index
articles_path帮助器告诉Rails将表单指向与文章前缀关联的URI模式; 并且表单将(默认)发送一个POST请求到那个路由。 这与当前控制器ArticlesController的创建操作相关联。
通过定义表单及其相关路径,您将能够填写表单,然后单击“提交”按钮开始创建新文章的过程,请继续操作。 当您提交表单时,您应该看到一个熟悉的错误:
您现在需要在ArticlesController中创建create操作才能工作。
默认情况下,form_with使用Ajax提交表单,从而跳过整页重定向。 为了使本指南更容易进入,我们现在已经禁用了local:true。
5.3Creating articles(创建文章)
为了使“未知操作”消失,您可以在新操作下面的app / controllers / articles_controller.rb中的ArticlesController类中定义一个创建操作,如下所示:
相关阅读
餐饮服务员要面向各种各样的顾客,他们有不同的个性,不同的爱好,所以他们有不同的消费习惯和消费特征。在推销过程中,投其所好是非常重
创业公司如何建立、完善和规模化一个增长计划?一起来看看,来自顶尖创业公司的 25 位杰出 Growth 专家的建议。来自顶尖创业公司的 2
1. 认识互联网 思考:平常我们上网的时候是怎么实现的? 引入:上网其实打开浏览器,然后输入一个URL,最后就看到了网站打开的效果。
一、背景 金融和重要领域国密改造是我国大力推进自主国产密码应用的重要政策。2011年3月,人民银行发布了《关于推进金融IC卡应用
第一、品牌网站建设的重要性品牌是一个产品的代词,品牌的推广对于实现品牌的最终提升非常重要,品牌甚至可以被用作某一类型产品的代