通过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)创建数据的更多相关文章

  1. [ruby on rails] 跟我学之(9)删除数据

    首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1> ...

  2. [ruby on rails] 跟我学之(8)修改数据

    修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...

  3. [ruby on rails] 跟我学之(6)显示指定数据

    根据<[ruby on rails] 跟我学之路由映射>,我们知道,可以访问 GET    /posts/:id(.:format) 来显示具体的对象. 1. 修改action 修改 ap ...

  4. [ruby on rails] 跟我学之(5)显示所有数据

    之前的index页,显示的是hello world,现在将其修改为显示我们在rails console里面录入的数据. 1. 修改action 如之前的章节<[ruby on rails] 跟我 ...

  5. [ruby on rails] 跟我学之(4)路由映射

    前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...

  6. [ruby on rails] 跟我学之(3)基于rails console的查增删改操作

    本章节展开对model的介绍:包括查增删改操作.紧接着上面一节<[ruby on rails] 跟我学之HelloWorld> 创建模型 使用命令创建模型 创建表post,默认自带两栏位 ...

  7. [ruby on rails] 跟我学之(2)HelloWorld

    1. 创建工程 rails new blog 2.查看下文件结构 tree 输出如下,请留意红圈中的部分. Gemfile, 用来管理应用程序的gems, 有点类似于python的包,有专门的网站来查 ...

  8. [ruby on rails] 跟我学之(1)环境搭建

    环境: ubuntu 12.04 (64bit) 代理: 自己最好弄一个代理. 环境配置指令如下: sudo apt-get update sudo apt-get install curl \cur ...

  9. [ruby on rails] 跟我学之(10)数据输入验证

    这里简单加上几个验证,非空,最小长度,唯一 修改模型 修改app/models/post.rb文件,如下: class Post < ActiveRecord::Base #attr_acces ...

随机推荐

  1. 第四十六课:MVC和MVVM的开发区别

    实现MVC的目的就是为了让M和V相分离.前端的MVC无法做到View和Model的相分离,而MVVM可以. 我们先来看一个用MVC模式开发的经典例子:(一定要深入了解这种开发的思想,而不是看懂代码) ...

  2. C语言总结(6)

    1.表达式: 算数表达式: 单目:+, -, ++, --. 双目:+,-,*,/,%. 赋值表达式: 简单赋值:= 复合赋值:+=,-=,*=,,/=%=,!=. 关系表达式: >,>= ...

  3. “耐撕”团队第一次讨论——“抢答器”需求分析

    团队名称:"耐撕" 团队成员:齐嘉亮.刘伟硕.濮成林.郑蕊 项目名称:"抢答器"(有待改善) 第一次讨论 时间:20160316 地点:软件所 人员:全体 内容 ...

  4. java web中jsp,action,service,dao,po分别是什么意思和什么作用

    JSP:全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动 ...

  5. asp.net 捕获全局未处理异常的几种方法

    通过HttpModule来捕获未处理的异常[推荐] 首先需要定义一个HttpModule,并监听未处理异常,代码如下: public void Init(HttpApplication context ...

  6. 关于 Maven 的插件maven-war-plugin

    在进行项目发布的时候,可能会碰到这样的情况, 希望在保持项目源代码不变的前提下,希望能够针对不同的运行环境获得相应的运行包.(比如war包) 基本配置 :(包括排除 不想打进war包的jar 的配置) ...

  7. jsp学习(二)

    jsp运行原理 当服务器上的一个jsp页面被第一次请求标记时,服务器上的jsp引擎首先将jsp页面文件转译成一个Java文件,并编译这个java文件生成字节码文件,然后执行字节码文件响应客户的请求. ...

  8. Nagios告警和监控主机安装介绍(三)

    Nagios邮件告警 配置sendEmail 解压缩tar –zxvf sendEmail-v1.56.tar.gz cd sendEmail-v1.56 将可执行程序复制cp sendEmail / ...

  9. omnetpp inet

    http://blog.csdn.net/midie/article/details/5086983 omnetpp inet 自带了Mingw编译环境,而不再需要Visual C编译环境了.事实上, ...

  10. PHP中PDO的配置与说明

    住[PDO是啥] PDO是PHP5新加入的一个重大功能,因为在PHP5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么php_mysql.dll.php_pgsql.dll ...