通过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. MVC4 code first 增加属性,对应自动修改列的方法笔记

    VS工具>库程序包管理器>程序包管理控制台,然后输入以下命令 enable-migrations -contexttypename Mvc4Application1.Models.Movi ...

  2. “耐撕”团队 2016.04.05 站立会议

    1. 时间: 20:10--20:25  共计15分钟. 2. 成员: Z 郑蕊 * 组长 (博客:http://www.cnblogs.com/zhengrui0452/), P 濮成林(博客:ht ...

  3. VS插件之小番茄

    文件源以及安装说明! http://www.youranshare.com/app/98.html

  4. Gallery 图片画廊

    Gallery 图片画廊 学习网址http://amazeui.org/widgets/gallery?_ver=2.x

  5. BZOJ2654 tree

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...

  6. TYVJ1939 玉蟾宫

    背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代 ...

  7. 关于mysql乱码的问题

    ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8 COLLATE UTF8_GENERAL_CI; 第一步,用mysql的自带修复工具在bin文 ...

  8. php两种导出excel的方法

    所需要的:jquery库,phpexcel插件,页面导出excel效果测试文件explode.php,excel导出功能实现文件exp.php和explode_excel.php,文件相关内容在此文下 ...

  9. HD2444The Accomodation of Students(并查集判断二分图+匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  10. $root knockout

    http://www.cnblogs.com/rohelm/p/3209757.html 以列表方式呈现数据  处理以数组形式储存的多条数据,要先认识foreach.在ViewModel定义一个Jav ...