rails手脚架(scaffold)功能

简介: scaffold是一个快速开发rails应用的代码框架,可以使用一条命令实现CRUD操作。1: 创建一个应用 rails new scaffoldapp cd scaffoldapp rails s在浏览...

scaffold是一个快速开发rails应用的代码框架,可以使用一条命令实现CRUD操作。

1: 创建一个应用

 rails new scaffoldapp
 cd scaffoldapp
 rails s

在浏览器中打开http://localhost:3000/

2: 创建一个名为blog的Scaffold

使用rails的scaffold创建模版,在此基础上进行增加、删除、修改、查询(CRUD)操作.

rails g scaffold blog title:string content:text picture:string 

数据库迁移:

rake db:migrate

浏览器中访问:http://localhost:3000/blogs
这里写图片描述

3:添加图片上传功能

可以参考我的上一篇博客rails中使用carrierwave上传图片
更新Gemfile

gem 'carrierwave'
bundle install
rails generate uploader Picture

修改/app/models/blog.rb,挂载picture属性

mount_uploader :picture, PictureUploader

打开 app/views/ideas/_form.html.erb ,找到这一行:

<%= f.text_field :picture %>

将它改成:

<%= f.file_field :picture %>

并将这一行:

<%= form_for(@blog) do |f| %>

改成:

<%= form_for(@blog,:html => {:multipart => true}) do |f| %>

打开 app/views/ideas/show.html.erb 并将

<%= @blog.picture %>

改为

<%= image_tag(@blog.picture_url, :width => 300) if @blog.picture.present? %>

4.修改样式

打开/app/controllers/blogs_controller.rb
新建一个方法

 def list
     @blogs = Blog.all
  end

在/app/views/blogs/目录下新建list.html.erb

<div class="bgheader">
    <h1>My Blog</h1>
</div>

<% @blogs.each do |blog| %>
      <h2 class="bgtitle"><%=link_to blog.title,blog %></h2>
      <p><%= blog.content[0,150]%></p>

<% end %>

修改/config/routes.rb,加入:

root 'blogs#list'

增加/app/assets/stylesheets/application.css

body{

    padding: 0px;
    margin:0px;
    width:1000px;
    margin:0 auto;
 }
.bgheader{
    margin-top: -20px;
    height: 80px;
    background-color: #E9F2E8;
}
.bgheader h1{
    color: #238A2A;
    padding-top: 15px;
    padding-left: 20px;
}

.bgtitle a:link,.bgtitle a:visited{
    color: #0080FF;
}
#blog_title{
    width:300px;
    height:20px;
}
#blog_content{
    width:480px;
    height:300px;
}
.bgcontainer{
    width:600px;
}
.bgshow{
    width:800px;
}

修改/app/views/blogs/show.html.erb

<div class="bgshow">
<p id="notice"><%= notice %></p>

<h2>
  <%= @blog.title %>
</h2>
  <%= @blog.content %>
<hr>
  <%= image_tag(@blog.picture_url, :width => 300) if @blog.picture.present? %>
<hr>
<%= link_to 'Edit', edit_blog_path(@blog) %> |
<%= link_to 'Back', blogs_path %>
</div>

效果

首页
这里写图片描述
详情页
这里写图片描述

目录
相关文章
|
JavaScript 前端开发 小程序
js 实现浏览器下载视频2种方法
js 实现浏览器下载视频2种方法
1663 0
|
自然语言处理 芯片 异构计算
Vivado初体验LED工程 1
Vivado初体验LED工程
282 0
|
运维 算法 调度
系统授权license方案
软件系统设计关于授权时的一点见解
|
存储 Linux Go
u-boot引导加载程序的命令列表
U-Boot提供的命令集覆盖了从硬件初始化、文件操作、网络配置到系统启动的各个方面,为嵌入式系统开发和维护提供了强大的支持。熟悉并熟练运用这些命令,可以帮助开发者高效地完成系统引导和调试任务。在实际操作中,可以根据具体硬件平台和需求,查阅U-Boot的官方文档或社区资源,以获取更详尽的命令使用方法和示例。
299 1
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的药店药品信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的药店药品信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
318 3
|
11月前
|
算法 数据建模 网络安全
阿里云SSL证书2024双11优惠,WoSign DV证书220元/年起
2024阿里云11.11金秋云创季火热进行中,活动月期间(2024年11月01日至11月30日),阿里云SSL证书限时优惠,部分证书产品新老同享75折起;通过优惠折扣、叠加满减优惠券等多种方式,阿里云WoSign SSL证书将实现优惠价格新低,DV SSL证书220元/年起。
853 5
|
12月前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
380 10
|
11月前
|
人工智能 数据管理 jenkins
探索软件测试中的自动化框架:从基础到高级实践
在当今快速发展的软件行业中,自动化测试已成为提高开发效率和保障产品质量的关键手段。本文将深入探讨软件测试自动化的各个方面,包括其重要性、主流的自动化测试框架、以及如何有效地实施自动化测试策略。我们还将通过案例分析,展示自动化测试在实际项目中的应用效果,以及面临的挑战和解决方案。无论是软件开发者还是测试工程师,了解并掌握自动化测试技术都将极大提升工作效率和产品质量。
238 0
|
存储 缓存 API
Vulkan 围炉夜话4
Vulkan 围炉夜话
202 5
|
机器学习/深度学习 数据可视化 数据挖掘
Jupyter Notebook: 数据科学的最佳实践
【8月更文第29天】Jupyter Notebook 是一个交互式的计算环境,非常适合进行数据分析、可视化和机器学习任务。它不仅支持多种编程语言(如 Python、R 和 Julia),还能将文本、代码、图表和多媒体元素融合在一起,非常适合编写可重复使用的分析报告。
692 1