通过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.newend

然后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.saveredirect_to posts_path, :notice=>"Your post was saved"elserender "new"endendprivatedef post_paramsparams.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,谢谢!

转载于:https://www.cnblogs.com/Tommy-Yu/p/4141518.html

[ruby on rails] 跟我学之(7)创建数据相关推荐

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

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

  2. ruby on rails_我成为了Ruby on Rails和React的贡献者,你也可以

    ruby on rails I am really grateful to have contributed to a few open source projects, including two ...

  3. 1.1 开始起步,配置ruby on rails运行环境

    这是个复习用的傻瓜式教程. 现在才开始学的ruby on rails,我的第一次配置以失败告终,因为连一个应用程序都创建不了.后来发现rails里面的ruby版本竟然和装的不一样,原来一开始装了两个版 ...

  4. [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

    本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(Paa ...

  5. Ruby on Rails -跑起来吧hello World!

    最近圆子里关于各种语言性能讨论着实很热.Milo Yip同学的C++/C#/F#/Java/JS/Lua/Python/Ruby渲染比试等,这样讨论反而让我们从更多角度去理解和认知各种语言之间的差异和 ...

  6. 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐

    本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTful API项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图. 课程简 ...

  7. [转载] Ruby、Rails、Agile的启示

    转自:http://vipnews.csdn.net/newscontent.aspx?pointid=2008_03_03_170600555 文/杨祥吉 本文作者以使用Ruby和Rails进行创业 ...

  8. Ruby on Rails 的秘笈是什么?

    Ruby on Rails 的秘笈是什么? 我们能从 Rails 框架学到的经验 文档选项 将此页作为电子邮件发送 级别: 初级 Bruce Tate ([email]bruce.tate@j2lif ...

  9. Ruby on Rails的核心特性是什么?

    Ruby on Rails好像一直处于争论的风口浪尖.大多数争论的核心是其所宣称的令人惊异的生产力.作者Bruce Tate已经开始理解Rails并不是一个更好的工具,而是一个不同类型的工具.本文研究 ...

最新文章

  1. mysql学习【第10篇】:数据库之索引与慢查询优化
  2. 如何正确使用Python临时文件
  3. iOS之播放音效(AVFoundation)
  4. 您的请求参数与订单信息不一致_[淘客订单检测]淘宝客订单检测接口,淘客订单查询API...
  5. qt4 连接mysql_Qt4访问mysql 数据库的简单教程
  6. linux mei swap,Linux swapoff命令
  7. html css周志,【嘉兴东臣php】HTML+CSS+JS周总结
  8. GC之详解CMS收集过程和日志分析
  9. Optisystem中器件的学习(1-Visualizer Library、Sensors)
  10. python 中文乱码问题深入分析
  11. 网页元素3D效果展示
  12. 小技巧之统计代码行数
  13. 并购当当是海航自编自导的一场大戏
  14. mysql导出表结构及数据的三种方法
  15. 微星AMD 785G主板的BIOS设置详解
  16. 数图复习---第二章
  17. java注解和反射——狂神说java学习笔记三
  18. make和makefile的区别
  19. 练习使用Python post请求爬取数据,并用mySQL数据库进行存储
  20. matlab生成二值图像,m文件的使用

热门文章

  1. 《神经网络和深度学习》系列文章五:用简单的网络结构解决手写数字识别
  2. (IOS)BaiduFM 程序分析
  3. window.opener方法的使用 刷新父页面
  4. (237)Vivado工程编译时间过长原因总结
  5. FPGA资源评估方法
  6. php中的递归查找文件夹,PHP递归遍历文件夹
  7. 14010.xilinx-EMIO扩展SPI设备
  8. python编程计算器_Python编程之计算器/字符及界面
  9. 【C语言】统计数字字符的个数(字符组)
  10. 计算机游戏动漫制作自我鉴定,动漫设计专业自我鉴定