通过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. Bootstrap3.0学习第十七轮(JavaScript插件——模态框)

    详情请查看http://aehyok.com/Blog/Detail/24.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  2. 每天一个linux命令(50):telnet命令

    telnet 命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是 Internet远程登陆服务的标准协议和主要方式.它为 ...

  3. Java-小数点控制

    package 运算及类型转换类; import java.text.DecimalFormat; public class 控制小数点类 { public static double decimal ...

  4. Java算法-堆排序

    package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; public class HeapSor ...

  5. Mathematical operation

    (1)Using let let result=2+1 let result=2-1 let result=2*1 let result=2/1(2) Using bracket echo $(($p ...

  6. 【HDU 2546】饭卡(DP+贪心)

    贪心:最贵的留到最后买.状态转移方程:dp[j]=dp[j+a[i]]|dp[j],dp[i]表示余下i元. 原来就不足5元,那就不能买啦. #include<cstdio> #inclu ...

  7. web.xml中/与/*的区别

    1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截了所有的请求.同时对*.js,*.jpg等静态文件的访问也就 ...

  8. (转)google Java编程风格中文版

    转:http://www.hawstein.com/posts/google-java-style.html 目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 ...

  9. js div浮动层拖拽效果代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Shell编程检测监控mysql的CPU占用率

    shell编程很强大! 网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法就是重启mysql服务.由于这种事具有不 ...