进入Ruby on Rails世界

   2023-02-10 学习力0
核心提示:一、ruby和rails简介  ruby是一种面向对象的动态脚本语言。它的语法很灵活,而且提供了丰富的类库。因此,用ruby编写程序的效率是非常高的。  虽然ruby很早就出现了(1993年诞生于日本),但由于ruby一直缺乏英语文档,而且当时的ruby在web开发上并不怎么
一、ruby和rails简介

  ruby是一种面向对象的动态脚本语言。它的语法很灵活,而且提供了丰富的类库。因此,用ruby编写程序的效率是非常高的。

  虽然ruby很早就出现了(1993年诞生于日本),但由于ruby一直缺乏英语文档,而且当时的ruby在web开发上并不怎么出众。因此,在2000年之前,ruby还只在日本流行。但这一切被2000年问世的rails打破。

  Rails是使用纯ruby编写的框架(framework)。它对web开发提供了强有力的支持,如支持数据映射、MVC模式、Web Services、安全等。而且这些功能操作起来要比同类的产品容易的多,如MVC模式就比struts更容易使用。除了这些,rails还可以根据模板自动生成web程序。这样可以省去我们很多的时间。在讨论ruby如何借助rails快速开发web程序之前,让我们先看看如何安装和运行ruby和rails。

  安装和运行ruby

  Ruby支持多个操作系统平台,目前支持windows、linux和OS X,可以从ruby的官方网站下载ruby的安装程序和源代码:http://www.ruby-lang.org/en/downloads/。

  在windows下为了方便安装,建议下载ruby的安装版本。在安装完后,在ruby的安装目录中的bin目录中有两个可执行文件:ruby.exe和rubyw.exe。第一个将启动一个控制台运行ruby程序,而第二个不启动控制台运行ruby程序。让我们先编写一个简单的ruby程序吧!

  建一个文本文件:first_ruby.rb

  输入一条ruby语句:

  puts Time.now.strftime("%Y-%m-%d %H:%M:%S")

  执行ruby first_ruby.rb

  如果输出类似"2006-10-07 19:20:20"的字符串,则说明ruby已经安装成功。

  注:ruby有一个eclipse插件非常不错,如果对其感性趣,可以使用eclipse的help->Software Updates->Find and Install功能通过http://updatesite.rubypeople.org/release进行安装。安装和运行rails

  Rails在windows下安装是非常容易的,只需要执行如下命令:

  gem install rails --include-dependencies即可。

  注:gem命令在ruby安装目前的bin目录中,运行时要设置path路径。还有在执行这条命令时本机一定要连接internet。因为这条命令是通过internet来下载rails并安装的。

  在安装完rails后。执行下列命令

rails first_rails
cd first_rails
ruby script/server

  如果出现如图1的提示,则说明这些命令执行成功。

  进入Ruby on Rails世界

  图1 ruby script/server的提示信息

  然后在IE中输入http://localhost:3000。如果出现如图2的欢迎界面,则说明rails安装成功。

  进入Ruby on Rails世界

  图2 rails的欢迎界面

  Rails支持很多数据库,它默认支持的数据库是MySQL。由于使用MySQL数据库不需要安装驱动。因此,本文将使用MySQL数据库来讨论rails如何对数据库进行操作

  二、使用rails自动生成web程序

  Rails最独特的功能就是可以根据模板自动生成web程序,这样可以为我们省去很多时间。下面我们就使用rails本身提供的模板来生成一个简单的web程序。

  第一步 初始化

  执行如下命令

rails autoweb
cd autoweb

  第二步 建立数据库

  启动MySQL服务后。以root用户登录后建立三个数据库

create database autoweb_development
create database autoweb_test
create database autoweb_production

分别在这三个数据库中建立同样的表records。

CREATE TABLE records (
id int(10) unsigned NOT NULL auto_increment,
title varchar(50) NOT NULL,
content mediumtext NOT NULL,
dt datetime NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

  第三步 修改database.yml文件

  database.yml文件保存着数据库的连接信息。这个文件在first_railsconfig中。其中有三个标签:development、test和production。从理论上它们应该描述三个不同的数据库。这三个数据库的结构应该是完全一样的。它们分别用在开发、测试和产品发布上。从而使这些工作不互相冲突。

  在本例中只需要修改password项即可(将其设置为root的密码)。

  第四步 生成web程序代码

  执行如下命令

ruby script/generate scaffold Record Admin

  第五步 启动服务

  执行如下命令

ruby script/server

  到现在为止,这个web程序已经生成完毕。它可以对records表进行基本的增、删、改操作。在IE中输入http://localhost:3000/admin可对records进行相应的操作。界面如图3所示。

  进入Ruby on Rails世界

  图3 autoweb的首页

  点击"New record"可增加一条新记录以及进行其它操作。

  三、使用活动记录(Active Record)进行数据映射

  在上面给出的例子中也许有一个地方最令人迷惑。就是在上述五步中并未给出要操作的是哪一个表。那么rails如何得知我们要操作records表呢?这一点就要从rails中的活动记录说起。

Rails提供了一种非常方便的数据映射机制 - 活动记录。这种机制可以使用尽可能少的代码将一个数据表映射成ruby对象。为了达到这一目的,rails给出了一些约定。如上面的例子的第四步中使用了Record作为映射数据表的类名,而如果不明确指定所映射的表名时,rails就将这个类名后加s作为表名,即records。下面的代码是一个关于活动记录的例子。

require 'rubygems'
require_gem 'activerecord'
class Record < ActiveRecord::Base
# set_table_name('tablename')
establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => "root",
:password => "password",
:database => "autoweb_development"
)
end
record = Record.new
record.title = 'abc'
record.content = 'aabbcc'
record.dt = Time.now
if record.save
puts '增加记录成功!'
else
puts '增加记录失败!'
end

  运行它 ruby map.rb

  上面的代码有4点需要注意一下

  1. 活动记录必须从ActiveRecord::Base继承。

  2. 除了使用databvase.yml设置数据库连接信息外,还可以通过establish_connection将数据库连接信息写在程序中。

  3. 使用活动记录映射数据表一般并不需要将表中的每个字段定义在类中,默认情况下这字段名就是类的属性名。

  4. 如果不想使用约定来确定表名,可以通过set_table_name指定其它的表名。

  四、使用ruby on rails实现一个在线日记程序

  为了更好地理解如何利用rails来开发web应用程序,在这一节中我们使用rails手工编写一个在线日记程序。这个程序以一天为单位记录信息。即每一天是一条记录。下面就详细描述这个程序的设计过程:

第一步 初始化

rails diary
cd diary

  第二步 建立数据库

create database diary;
create table records (
`id` int(10) unsigned NOT NULL auto_increment,
`title` varchar(50) NOT NULL,
`content` mediumtext NOT NULL,
`date` char(10) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Index_2` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

  第三步 编写数据表映射类

  在appmodels中建立record.rb文件,在其中输入如下代码:

class Record < ActiveRecord::Base
establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => "root",
:encoding => "gb2312",
:password => "password",
:database => "diary"
)
end

  注: :encoding => "gb2312" 是必须的,如果没有,汉字就无法保存在数据库中了。

  第四步 编写控制类

  在appcontrollers中建立diary_controller.rb文件,在其中输入如下代码。

class DiaryController < ApplicationController
before_filter :configure_charsets
def configure_charsets
@response.headers["Content-Type"] = "text/html; charset=gb2312"
end
def index
end
def write
# 查找当天的记录,看看今天是否已经有日记了
@record = Record.find_by_date(Time.now.strftime("%Y-%m-%d"))
if @record == nil # 如果没有,增加一条记录
@record = Record.new
end
end
def create
@record = Record.find_by_date(Time.now.strftime("%Y-%m-%d"))
if @record == nil
@record = Record.new
@record.date = Time.now.strftime("%Y-%m-%d")
end
# 保存数据
if @record.update_attributes(params[:record])
@saved = true
else
@saved = false
end
end
def query
end
def result
# 得到提供的日期
@year =@request.params["record[date(1i)]"].to_s;
@month = sprintf("%02d", @request.params["record[date(2i)]"].to_s)
@day = sprintf("%02d", @request.params["record[date(3i)]"].to_s)
@query_date = @year + "-" + @month + "-" + @day
@record = Record.find_by_date(@query_date)
end
end

以上代码有4点需要说明一下:

  1. 控制类必须从ApplicationController继承

  2. 控制类中每一个方法都可作为一个path,如write方法可以在IE中输入http://localhost:3000/diary/write。然后rails先执行这个方法,再调用下面将要讲的rhtml文件。

  3. configure_charsets方法是必须的。这个方法在向IE输出html代码之前调用。而其中的代码@response.headers["Content-Type"] = "text/html; charset=gb2312"设置了html所支持的编码类型。如果没有这条语句。必须得手工调整IE的编码设置才能正常显示汉字。

  4. index方法是默认路径。如果直接输入http://localhost:3000/diary,则执行index方法。

  第五步 编写rhtml文件

  也许你看到这个标题会感到奇怪,是不是写错了,是html吧?我可以肯定地告诉大家,就是rhtml文件。这个文件类型是rails定义的。它类似于jsp或aspx文件。是在后台执行的。在其中定义了很多类似于jsp的tag的东西。由于rhtml文件很多,在这里只给出write.rhtml的例子。

<h3>日记</h3>
<%= start_form_tag :action => 'create' %>
<%= render :partial => 'form' %>
<%= submit_tag "保存" %>
<%= end_form_tag %>

  其中submit_tab就是一个tag。Rails将submit_tag翻译成html代码传给IE或其它浏览器。其它的rhtml文件请参阅本文提供的源代码。这些文件都被建立在appviewsdiary中。

  注:每一个作为path的方法必须对应一个rhtml文件,否则会报错。

  第六步 启动服务

  ruby script/server

  在IE中输入http://localhost:3000/diary可看到如图4所示的界面。

 

  进入Ruby on Rails世界

  图4 日记程序主界面

  通过点击"写日记"和"查询日记"链接,可以进行相应的操作

  五、小结

  通过上节的介绍,我们已经了解了使用rails开发web程序的基本过程。使用rails开发web程序自动遵循MVC模式。分别将M、V、C所定义的代码放到了appmodels、appviews和appcontrollers三个目录中。然后rails会自动处理。这一点要比struts的一大堆设置方便得多。

  当然,rails的功能还远远不只这些。Rails最强大的功能就是活动记录。使用它可以很方便地映射数据表,而且还可以描述表之间的相互关系,以及其它一些有价值功能。除了这些外,rails还支持web services、actions mailer、security等。总之,如果能够灵活使用rails,就可以通过ruby快速开发出强大的web应用程序。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • [ruby on rails] 跟我学之(6)显示指定数据
    根据《[ruby on rails] 跟我学之路由映射》,我们知道,可以访问 GET    /posts/:id(.:format) 来显示具体的对象。 修改 app/controllers/posts_controller.rb的show这个action。这里有个难题,如果获取url里面的参数?可以通过params内置变量进行访问
    03-16
  • [ruby on rails] 跟我学之(10)数据输入验证
    这里简单加上几个验证,非空,最小长度,唯一修改app/models/post.rb文件,如下:class PostActiveRecord::Base#attr_accessible :title, :contentvalidates :title, :context, :presence = truevalidates :title, :length = { :minimum =2}validates :title,
    03-16
  • 我尝试使用 Ruby 和 mittsu 库制作 3D 战斗动作游戏
    我尝试使用 Ruby 和 mittsu 库制作 3D 战斗动作
    概述这篇文章是关于我偶然发现的 hitbox 的回忆录。2022 夏季鲁比训练营创造了这个游戏。我的游戏仓库这里是。我们作为一个团队开发,有 4 名成员第一次见面,并第一次使用 Git 和 Github 进行开发。使用的技术是Ruby,三通图书馆是。我主要负责碰撞检测,所
    03-16
  • 我只是想在我的 Mac 上将 Ruby 和 Rails 更新到终端中的最新版本。 .
    我只是想在我的 Mac 上将 Ruby 和 Rails 更新到
    介绍自从我尝试创建一个简单的应用程序以来已经有很长时间了,并且我尝试在创建它之前将 Ruby 和 Rails 更新到最新版本,但是我意外卡住了,所以我将它作为备忘录留下。作为版本升级1. 更新 Homebrew 和 rbenv2. 红宝石更新3. Rails 更新这就是它的感觉。让我
    03-16
  • ruby写爬虫 ruby python
    ruby写爬虫 ruby python
    http://www.javaeye.com/topic/545160爬虫性能比较http://www.rubyrailways.com/data-extraction-for-web-20-screen-scraping-in-rubyrails/srcapihttp://huacnlee.com/blog/ruby-scrapi-collect-koubei  2009年4月22日 星期三用ruby写的一个网络爬虫程序前
    03-08
  • 一个关于创建一个可以用 Ruby 做 UMAP 的 gem 的故事
    一个关于创建一个可以用 Ruby 做 UMAP 的 gem
    介绍统一流形逼近和投影 (UMAP) 是一种通过降维的可视化方法,通常与 t-SNE 一起使用。用 Ruby 语言执行机器学习时,瘤胃我认为有很多情况下你使用 gem 调用。瘤胃有t-SNE但不是UMAP。这一次,它是一个 C++ 库乌马普的红宝石绑定我创造了它,所以我会在我忘记
    03-08
  • 让我们制作一个应用程序,当您在表格①中输入名称时输出 PDF 戳记(使用 Ruby on Rails 创建 PDF 文件)
    让我们制作一个应用程序,当您在表格①中输入名
    介绍你好!我的名字是荣查本。这次在Ruby on Rails中实现PDF转换的时候,用到了一个叫Prawn的gem,所以总结了一下。您可以通过阅读本文创建フォームに名前を入力するとPDF化された印鑑を出力するアプリ。即使是我,一个初学者也可以做到,所以实现方法很简单
    03-08
  • [脚本_Ruby]Windows安装配置Ruby On Rails
    感觉Java学的差不多了,想接触下Ruby On Rails,看看它比Java WEB高效到哪里了,在Ubuntu12.10上弄了两天总是报错提示没有指向的文件sqlite3,不管怎么安装sqlite3都不行,到最后没办法只有跑到WIN7平台下试试,以下就是我搭建Ruby On Rails的过程:    
    02-10
  • Prawn:Ruby生成PDF更简捷的选择
    在InfoQ上看到《Prawn:使用Ruby生成PDF更简捷》,其说到的Prawn可以更加快捷的在Ruby中生成PDF文件。因为之前使用过很多版本的PDF生成类库都不尽如人意,有的太复杂,有的太慢,于是对这个做了测试。1、安装安装很简单,直接使用gem install prawn即可安装完
    02-10
  • Ruby On Rails:InstanRails
    参考数据:对于Ruby On Rails 不是粉清楚的朋友可以参考以下的连结信息,该连结网站都提供不错的Ruby On Rails 信息。Ruby: 一个纯OO的脚本语言..Ruby on Rails: 快速建置Web的MVC架构的Framework说明:整合环境: Instant Rails 是在Windows环境中,整合了Ruby,
    02-10
点击排行