在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息。
编辑 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,谢谢! |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论