[ruby on rails] 跟我学之(7)创建数据
通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息。
1. views初步
编辑 app/views/posts/index.html.erb这个view文件,如下:
<% @posts.each do |post| %>
<h2><%=link_to post.title,post%></h2>
<%=post.context%><br/><hr/>
<% end %>
<p><%= link_to "Add a post", new_post_path %></p>
new_post 是 new动作的prefix,参考[ruby on rails] 跟我学之路由映射,但在其后面添加了_path后缀。
然后编辑app/views/posts/new.html.erb这个view文件,如下:
<h1>Add a new post</h1>
2. 绑定到对象
问题来了,怎么绑定到对象?
解决方法是先创建一个空的对象,修改new 动作,如下:
def new
@post = Post.new
end
然后view文件就可以使用它了,修改app/views/posts/new.html.erb文件,如下:
<h1>Add a new post</h1> <%= form_for @post do |f| %>
<p>
<%= f.label :title%><br/>
<%= f.text_field :title%>
</p>
<p>
<%= f.label :context%><br/>
<%= f.text_area :context%>
</p>
<p>
<%= f.submit "New Post"%>
</p> <% end %>
使用label显示字段名称, 由于context(content)是text类型,所以用text_area显示比较好。注意 form_for方法。
3. 实际的保存
实际保存是由create进行的,修改create动作如下,
保存成功,则跳转到index页面,否则停留在new页面,具体代码如下:
def create
@post = Post.new(post_params)
if @post.save
redirect_to posts_path, :notice=>"Your post was saved"
else
render "new"
end
end private
def post_params
params.require(:post).permit(:title,:context)
end
其中:
1. 需要添加强类型的支持,
post_params属于强类型。会猜测传进来的参数里有哪些东东,允许哪些东东,性质上有点类似接口。
有兴趣了解为什么的话看这里。
2.notice 属于一个在flash消息,需要添加对flash消息的支持,修改全局view文件,也就是app/views/layouts/application.html.erb如下:
<!DOCTYPE html>
<html>
<head>
<title>Blog</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<% flash.each do |k,v| %>
<p><%=v%></p>
<% end%> <%= yield %> </body>
</html>
其中添加的部分是:
<% flash.each do |k,v| %>
<p><%=v%></p>
<% end%>
注意 <%= yield %>,这个部分相当于django的 block 标签,定义了一个容器区(placeholder),其他的页面(index,new,edit,show)都会在这个区域进行渲染。
flash消息只是显示一次,对于一个request来说。
最终效果如下:
转载请注明本文来自:http://www.cnblogs.com/Tommy-Yu/p/4141518.html,谢谢!
[ruby on rails] 跟我学之(7)创建数据的更多相关文章
- [ruby on rails] 跟我学之(9)删除数据
首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1> ...
- [ruby on rails] 跟我学之(8)修改数据
修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...
- [ruby on rails] 跟我学之(6)显示指定数据
根据<[ruby on rails] 跟我学之路由映射>,我们知道,可以访问 GET /posts/:id(.:format) 来显示具体的对象. 1. 修改action 修改 ap ...
- [ruby on rails] 跟我学之(5)显示所有数据
之前的index页,显示的是hello world,现在将其修改为显示我们在rails console里面录入的数据. 1. 修改action 如之前的章节<[ruby on rails] 跟我 ...
- [ruby on rails] 跟我学之(4)路由映射
前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...
- [ruby on rails] 跟我学之(3)基于rails console的查增删改操作
本章节展开对model的介绍:包括查增删改操作.紧接着上面一节<[ruby on rails] 跟我学之HelloWorld> 创建模型 使用命令创建模型 创建表post,默认自带两栏位 ...
- [ruby on rails] 跟我学之(2)HelloWorld
1. 创建工程 rails new blog 2.查看下文件结构 tree 输出如下,请留意红圈中的部分. Gemfile, 用来管理应用程序的gems, 有点类似于python的包,有专门的网站来查 ...
- [ruby on rails] 跟我学之(1)环境搭建
环境: ubuntu 12.04 (64bit) 代理: 自己最好弄一个代理. 环境配置指令如下: sudo apt-get update sudo apt-get install curl \cur ...
- [ruby on rails] 跟我学之(10)数据输入验证
这里简单加上几个验证,非空,最小长度,唯一 修改模型 修改app/models/post.rb文件,如下: class Post < ActiveRecord::Base #attr_acces ...
随机推荐
- DOM(六)事件类型
对于用户事件类型而言,最常用的是鼠标.键盘.浏览器. 1.鼠标事件: 鼠标的事件都频繁使用,下面例子就测试各种鼠标事件 <script language="javascript&quo ...
- struts1日期转换处理
问题场景 最近在维护公司旧的系统(用的struts1框架)的时候,在日期处理的时候,我将日期设定为Date类型,结果报以下错误: javax.servlet.ServletException: Bea ...
- Cas_个人理解
分为三个部分: 1.Cas服务器(用于验证用户是否正确) 1.用户信息存在服务端,其它客户端应用程序修改用户信息后需要同步到服务端 2.用户信息一般存储在服务端的数据 ...
- CSS和字符串实现三角形
听说是百度校招的题目,就写了一下 <!doctype html> <html> <head> <meta charset="utf-8"& ...
- poj2528 线段树+离散化
由于坐标可能很大,此时需要离散化,将值转化为对应的坐标. #include<stdio.h> #include<algorithm> using namespace std; ...
- SEO 相关知识
传统SEO 观念 换独立服务器 加硬件 减少http请求,压缩网页体积 css 放页面顶部,js 放页面底部 一个中等规模网站的架构 技术角度 切换不同的 User-agent Chrome 的 Ne ...
- JEECMS插件开发
在jeecms框架中,有一个简单的插件,它并没有写具体的功能实现,但可以从这个简单的插件中找到如何在jeecms框架中开发框架的方法. 首先创建一个jeecms的框架demo,登录jeecm ...
- BZOJ-1925 地精部落 烧脑DP+滚动数组
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1053 Solved: 633 [Submit][Status ...
- Spring MVC实现防止表单重复提交(转)
Spring MVC拦截器+注解方式实现防止表单重复提交
- java获取每个月的最后一天
package timeUtil; import java.text.SimpleDateFormat; import java.util.Calendar; public class LastDay ...