Sinatra

gem install sinatra
  • hello_sinatra
mkdir -p hello_sinatra
cd hello_sinatra

vim hello_sinatra.rb

require "sinatra"
get "/" do"Hello, world!"
end

然后

ruby hello_sinatra.rb

localhost:4567

修改hello_sinatra.rb

require "sinatra"
get "/post/:id" do"Hello, world!参数是#{params}"
end

然后刷新页面,会发现,有报错,不生效。

Note that every time we change the Ruby file, we’ll need to restart the server

这样每次修改一下,不是很讨厌吗??
shotgun可以避免这个问题。

gem install shotgun

然后启动的时候注意一下。

ruby hello_sinatra.rb -> shotgun hello_sinatra.rb
这个时候的端口,由4567改变成了9393

Creating a Basic Web App With Ruby and Sinatra

  • build sinatra app
mkdir pubic-bookmarks-sinatra
cd pubic-bookmarks-sinatra
vim public-bookmarks.rb
require 'sinatra'
get '/' do"#{['Hello', 'Hi', 'Hey', 'Yo'][rand(4)]} World!"
end
vim Gemfile
source 'https://rubygems.org' #gem源自行修改
gem 'sinatra'
ruby '2.1.2'

Note: bundle

vim config.ru
require './public-bookmarks'
run Sinatra::Application
rackup -p 4567
  • layout
# public-bookmarks.rb
require 'sinatra'
get '/' doerb :hello_world
end
mkdir -p views
#vim views/hello_world.erb
<%= ['Hello', 'Hi', 'Hey', 'Yo'][rand(4)] %> World!
layout
<!DOCTYPE html>
<html>
<head><title>PublicBookmarksSinatra</title></head>
<body><%= yield %></body>
</html>
  • Use ActiveRecord
# vim Gemfile
gem 'sinatra-activerecord'
gem 'pg'
gem 'rake'

Note: bundle

  • config/database.yml
#vim database.yml
development:adapter: postgresqldatabase: public-bookmarks-sinatra_developmenthost: localhostusername: postgrespassword: root
# vim Rakefile
require 'sinatra/activerecord/rake'
require './public-bookmarks'
然后在主文件里引入
# public-bookmarks.rb
require 'sinatra'
require 'sinatra/activerecord'
get '/' dodb_time = database.connection.execute('SELECT CURRENT_TIMESTAMP').first['now']request.logger.info "DB time is #{db_time}"erb :hello_world
end
现在重新启动下试试
rake db:create
rackup -p 4567
可以在后台日志看见相关的输出信息。
  • Build model
# 首先指定并创建一个migration的名字为create_public_bookmarks
rake db:create_migration NAME=create_public_bookmarks
然后打开这个文件 并且写入相关字段
# db/migrate/YYYYMMDDHHMMSS_create_public_bookmarks.rb
class CreatePublicBookmarks < ActiveRecord::Migrationdef changecreate_table :public_bookmarks do |t|t.string :titlet.string :urlt.text :descriptiont.string :submitter_emailt.timestampsendadd_index :public_bookmarks, :url, unique: trueend
end
执行迁移文件
rake db:migrate
接下来创建 public_bookmark model
mkdir models
# vim models/public_bookmark.rb
class PublicBookmark < ActiveRecord::Base
end
接下来我们需要在主文件里指定model
#public-bookmarks.rb
...
require './models/public_bookmark'
...
  • Build Controllers

Note: 在一些时候,我们需要类似rails的notice等闪存方式来提示信息。所以需要安装一个gem.

# Gemfile
...
gem 'rack-flash3'
...

Note: bundle

这个和model类似,需要在主文件内部指定实用。
# public-bookmarks.rb
...
require './models/public_bookmark'
require 'rack-flash'enable :sessions
use Rack::Flash
...
基本的配置差不多就这样,接下来,可以给controller填充一些action
get '/public_bookmarks' do@public_bookmarks = PublicBookmark.allerb :'public_bookmarks/index'
endget '/public_bookmarks/new' do@public_bookmark = PublicBookmark.newerb :'public_bookmarks/new'
endget '/public_bookmarks/:id' do@public_bookmark = PublicBookmark.find(params[:id])erb :'public_bookmarks/show'
endpost '/public_bookmarks/create' do@public_bookmark = PublicBookmark.new(params[:public_bookmark])if @public_bookmark.saveflash[:notice] = 'Public bookmark successfully created!'redirect to("public_bookmarks/#{@public_bookmark.id}")elseerb :'public_bookmarks/new'end
end
然后就可以在views下创建一个public_bookmarks文件夹,创建对应的view.
#views/public_bookmarks/index.erb:<span>Listing public_bookmarks</span><p id="notice"><%= flash[:notice] %></p><table><thead><tr><th>Title</th><th>Url</th><th>Description</th><th>Submitter email</th><th colspan="3"></th></tr></thead><tbody><% @public_bookmarks.each do |public_bookmark| %><tr><td><%= public_bookmark.title %></td><td><%= public_bookmark.url %></td><td><%= public_bookmark.description %></td><td><%= public_bookmark.submitter_email %></td><td><a href="/public_bookmarks/<%= public_bookmark.id %>">Show</a></td><% if @authenticated %><td><form action="/public_bookmarks/destroy/<%= public_bookmark.id %>" method='post'><input type='submit' value='Destroy' onclick="return confirm('Are you sure?')"></form></td><% end %></tr><% end %></tbody>
</table><br><a href='/public_bookmarks/new'>New Public Bookmark
</a>#views/public_bookmarks/show.erb:<p id="notice"><%= flash[:notice] %></p><p><strong>Title:</strong><%= @public_bookmark.title %>
</p><p><strong>Url:</strong><%= @public_bookmark.url %>
</p><p><strong>Description:</strong><%= @public_bookmark.description %>
</p><p><strong>Submitter email:</strong><%= @public_bookmark.submitter_email %>
</p><a href='/public_bookmarks'>Back
</a># views/public_bookmarks/new.erb:<span>New public_bookmark</span><%= erb :'public_bookmarks/form' %><a href='/public_bookmarks'>Back
</a># views/public_bookmarks/form.erb:<form action="/public_bookmarks/create" method='post'><% if @public_bookmark.errors.any? %><div id="error_explanation"><span><%= pluralize(@public_bookmark.errors.count, "error") %> prohibited this public_bookmark from being saved:</span><ul><% @public_bookmark.errors.full_messages.each do |message| %><li><%= message %></li><% end %></ul></div><% end %><div class="field"><label for="public_bookmark_title">Title</label><br><input id="public_bookmark_title" name="public_bookmark[title]" type="text"></div><div class="field"><label for="public_bookmark_url">Url</label><br><input id="public_bookmark_url" name="public_bookmark[url]" type="text"></div><div class="field"><label for="public_bookmark_description">Description</label><br><textarea id="public_bookmark_description" name="public_bookmark[description]"></textarea></div><div class="field"><label for="public_bookmark_submitter_email">Submitter email</label><br><input id="public_bookmark_submitter_email" name="public_bookmark[submitter_email]" type="text"></div><div class="actions"><input type="submit" value="Create Public bookmark"></div>
</form>

原文

github

使用sinatra实现简单的crud功能相关推荐

  1. MVC学习之简单的CRUD

    1.一点知识的总结 (1)MVC将展示页面和后台处理逻辑分离,不像ASPX中展示页面继承自后台的cs页面,MVC展示页面继承自ViewPage<dynamic>,最终继承自Page(使用A ...

  2. 使用React和Spring Boot构建一个简单的CRUD应用

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. Reac ...

  3. 使用Express和MongoDB构建简单的CRUD应用程序

    by Zell Liew 由Zell Liew 使用Express和MongoDB构建简单的CRUD应用程序 (Building a Simple CRUD Application with Expr ...

  4. Hibernate+Spring+Struts2+ExtJS开发CRUD功能

    http://blog.csdn.net/myloon/archive/2007/11/08/1873652.aspx-----多谢这么好的文章 Hibernate+Spring+Struts2+Ex ...

  5. SpringBoot开发Restful风格的接口实现CRUD功能

    一.前言 我们都知道SpringBoot的出现使得在开发web项目的时候变得更加方便.快捷.之前写过一篇文章是如何快速搭建一个springboot项目:SpringBoot入门:使用IDEA和Ecli ...

  6. 实现一个简单的投票功能

    实现一个简单的投票功能 最近项目中需要用到一个投票功能,当时觉得简单,向都没想就动手开始做,没想到走了不少弯路. 后来才发现,是想的太过简单了.来看看改进后的功能. 第一步:数据库设计 两个表:一个主 ...

  7. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  8. nodejs php web,nodejs实现的简单web服务器功能示例

    本文实例讲述了nodejs实现的简单web服务器功能.分享给大家供大家参考,具体如下: 前端js代码: $.ajax({ url:'http://192.168.0.114:3000',//服务器地址 ...

  9. php实现简单验证码的功能

    php实现简单验证码的功能 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta c ...

最新文章

  1. 通过一个端口读取多个按钮
  2. 并发测试mysql_Jmeter性能测试系列——结果分析与报告输出
  3. 中国工业自动化行业需求现状及投资风险评估报告2022-2027年版
  4. 国际农民丰收节贸易会-万祥军: 全球TOP10农企携手阿里
  5. Junit4小技巧-测试基类
  6. mysql查看系统运行日志文件_mysql自身运行日志文件详解
  7. 【机器学习】降维代码练习
  8. DCMTK:读取DICOM图像,添加一个Curve并将其写回
  9. android检测是否跳出应用程序,android – 检测应用程序何时打开/恢复
  10. SpringBoot配置swagger2(亲测有效,如果没有配置成功,欢迎在下方留言)
  11. (转)jquery基础教程七 选择器(selectors 的xpath语法应用)
  12. 39.Linux/Unix 系统编程手册(下) -- 能力
  13. 无法启动IE调试vs2008的一个解决办法
  14. u大师制作linux系统,U大师官方下载|U大师U盘启动盘制作工具官方版 v4.7.37.56 最新版 - 系统天堂...
  15. 操作系统课设 Nachos 实验六、七、八:Nachos 用户程序与系统调用、地址空间的扩展、系统调用 Exec() 与 Exit()
  16. 联网时浏览器跳出MSN中国网页
  17. 2018年版计算机技术类北大中文核心期刊目录
  18. 南向接口 YANG 文件定义规范
  19. Docker镜像安装的一般步骤
  20. Python 生成、识别社会统一信用代码

热门文章

  1. 基于Java+Mysql实现酒店预订系统【100010045】
  2. 苹果电脑python下载安装教程-Anaconda3 Mac版下载
  3. [python]爬取百度图片批量下载数据集
  4. 短视频剪辑怎么做?三个技巧别忽略,帮你做出让人眼前一亮的视频
  5. iphone制作电子杂志
  6. Android 仿冰草约课 日历
  7. 第2章 Android常见界面布局
  8. 选择最新 Chromium,支持 H264 / H265
  9. FC 坦克大战 老巢铁墙
  10. 几种通讯协议的比较RMI Httpinvoker = Hessian Burlap web service