`
yanzilee9292
  • 浏览: 538365 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Rails3入门锦集(3) 列出所有post,自定义布局,创建post

阅读更多

入门锦集1-8都来自官方的翻译:http://edgeguides.rubyonrails.org/getting_started.html

 

 

1. 列出所有Posts

要开始查看功能的最简单的地方应该是列举所有记录的代码了。现在我们打开 app/controllers/post_controller.rb, 看到 index 方法

 

def index
    @posts = Post.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
end

 

 实际上在这里有2个地方与rails2不同了,第一是查询的方式,以前我们可能会这样写

 

@posts = Post.find(:all)

,那么现在这种方式完全改变了,现在多出了一个重要的类 ActivaRecord::Relation 在里面分装了大量的数据库相关的操作。第二呢,我们不用写成上面的这种代码了:

 

respond_to :html,:js,:xml
def index
    @posts = Post.all
    respond_with @posts
end

 这样很容易解释,相应的格式请求使用相应的模板,比如我们访问 http://localhost:3000/posts.xml 那么我们会得到一个xml格式的posts, 是不是很REST? 这里我们加了一个:js, 这为后面教程中使用ujs做下铺垫,那么具体的用法我们会在后面教程中给大家一一说明。

 

Rails把所有该动作中的实例变量传递给相应的视图,这里是 app/views/posts/index.html.erb :

 

<h1>Listing posts</h1>
 
<table>
  <tr>
    <th>Name</th>
    <th>Title</th>
    <th>Content</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>
 
<% @posts.each do |post| %>
  <tr>
    <td><%= post.name %></td>
    <td><%= post.title %></td>
    <td><%= post.content %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>
 
<br />
 
<%= link_to 'New post', new_post_path %>
 

该视图遍历@posts数组来显示内容以及链接,一些要注意的地方:

 

  • link_to 绑定了特定的记录操作
  • edit_post_path 与 new_post_path 实际上在你设定 routes.rb 中相关resources的时候就已经给你生成的帮助器(好像一共有7个),你可以在控制器中看到不同的这种帮助器。

 

这里还有一点值得注意:在先前版本的rails中你可能需要使用 <%= h post.name %> 来实现HTML转义,那么在3.0中,默认就已经是转义的了,如果你需要获得未转义的HTML,你需要这样写 <%= raw post.name %> (raw我想大家很容易理解, java中也经常有这种警告)

 

2. 自定义布局

当rails渲染视图给浏览器时,它会把视图放置到布局内然后在输出。在先前的rails版本中,rails g scaffold 命令会自动创建控制器指定的布局,比如 app/views/layouts/posts.html.erb, 那么在3.0中 app/views/layouts/application.html.erb 作用与所有控制器。打开你的编辑器,把该布局修改如下:

 

<!DOCTYPE html>
<html>
<head>
  <title>Blog</title>
  <%= stylesheet_link_tag :all %>
  <%= javascript_include_tag :defaults %>
  <%= csrf_meta_tag %>
</head>
<body style="background: #EEEEEE;">
 
<%= yield %>
 
</body>
</html>
 现在你刷新你的页面你会发现背景变成了灰色。

 

3. 创建新的Post

创建一个新的Post将调用两个动作,第一个是new,它将初始化一个Post对象。

 

def new
    @post = Post.new
    respond_with @post
end

 (同样我们在这里改为更简单的方式, 是不是很DRY?)

在 new.html.erb 视图中显示一个空的Post给用户:

 

<h1>New post</h1>

<%= render 'form' %>

<%= link_to 'Back', posts_path %>

 <%= render 'form' %> 是我们第一次介绍Rails的局部模板。局部模板实际上也是一个视图文件,只是该文件可以被多个视图重复引用。在这种情况下,form可用于创建,更新 post,然后我们可以看到 app/views/posts/_form.html.erb:

 

<%= form_for(@post) do |f| %>
  <% if @post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% @post.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_area :content %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

 局部模板可以同样接受视图的实例变量,当然也可以接受视图传递过来的变量。这里有一个另一种写法。

首先我们先稍微了解一下局部视图。

 

  • 局部视图都以 下划线('_')开头
  • 局部视图本事存在一个变量可以传递到局部视图里面,该变量是 去掉下划线,比如我的局部视图是 _form.erb, 那么在局部里面有存在一个 form 的变量, 当然还可以设定其他变量或者集合,这些我们将在后面的教程中详细学习。

现在,我们有一个 @post 变量, 那么我们可以把 render 改为 <%= render @post %>, rails很聪明,那么我们在局部视图中就会存在一个 post 变量,所以在局部视图中 把所有@post改为post,最后我们还要把 _form.html.erb 改为 _post.html.erb. 大家可以试一下,当然其实在本教程中完全没有必要,我这样说只是在为后面的教程做铺垫,这样大家就会更容易明白。

 

那么关于局部视图的用法我们会在后面的内容中详细的介绍。

 

我们现在再来看下 form_for, form_for 用于根据模型对象生成表单。比如 f.text_field :name 会告诉rails生成一个文本输入框,并且保存模型的name属性。(实际上生成的是 <input type='text' name='post[name]' />)

 

实际上 form_for 方法知道你是new还是edit,然后对提交按钮设置相应的value,(比如在这里new里面是create post, edit里面是update post)

 

如果你需要创建与模型无关的表单,可以使用 form_tag 方法

 

当用户点击 Create Post 按钮时,浏览器将会把表单信息提交给create方法(RAILS知道调用create方法,因为这是POST提交的):

 

def create
    @post = Post.new(params[:post])
    if @post.save
      respond_with @post, :notice => 'Post was successfully created.'
    else
      render :action => 'new'
    end
end

 create方法根据传递的post参数初始化了一个post对象,保存成功以后放回用户请求的相应格式。然后把用户重定向到show页面并且设置一条成功创建的信息反馈给用户。

 

如果post由于验证失败等原因未能成功保存,那么控制器将把用户返回到new页面,并显示相应的错误信息。

 

“Post was successfully created.”保存在rails的flash哈希内,我们可以在视图层用<%=flash[:notice]%>查看(那么现在我们只需要 =notice 就可以了)

 

 

转自: http://onia.iteye.com/blog/826052

分享到:
评论

相关推荐

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    rails3入门指南

    ruby on rails文档,rails3入门指南

    Ruby on Rails入门权威经典

    《Ruby on Rails入门权威经典》是一本专门为初学者设计的指南,旨在帮助读者全面掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言的开源框架,以其“DRY(Don't Repeat ...

    Ruby on Rails入门例子

    2. 创建资源:使用`rails generate controller Posts`生成控制器,再用`rails generate scaffold Post title:string content:text`生成模型和相关的控制器、视图及路由。 3. 迁移数据库:编写迁移文件,更新数据库表...

    Ruby on Rails入门经典

    5. **Scaffold**:Rails提供的一种快速创建基本CRUD(创建、读取、更新、删除)功能的工具,帮助开发者快速搭建应用的原型。 6. ** erb和haml模板语言**:Rails支持两种视图模板语言,erb是嵌入式Ruby代码,而haml...

    [Rails] Rails 3 入门教程 (英文版)

    [Apress] Rails 3 入门教程 (英文版) [Apress] Beginning Rails 3 (E-Book) ☆ 出版信息:☆ [作者信息] Cloves Carneiro Jr., Rida Al Barazi [出版机构] Apress [出版日期] 2010年09月01日 [图书页数] 400页...

    Ruby on Rails入门经典代码

    本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习Rails的宝贵资源,帮助初学者快速掌握这个强大的框架。 1. **Rails基础知识**: - MVC架构:Rails的核心设计模式,模型负责数据处理,视图负责展示,控制器...

    rails_入门详细笔记(官网翻译).

    在开发过程中,可能会需要安装一些外部依赖的 gems,可以通过执行 `$ bundle install` 命令来安装 Gemfile 中列出的所有 gems。 #### 六、配置数据库 Rails 支持多种数据库,可以根据需求进行配置: - 默认情况下...

    Ruby on Rails:Rails框架入门.docx

    Ruby on Rails:Rails框架入门.docx

    Rails入门教程一(翻译).pdf

    创建新项目通常使用`rails new`命令,如`rails new myapp`,这会生成一个包含所有必要目录和文件结构的新项目。 数据库管理是Rails中的重要部分,它使用ActiveRecord,一个ORM(对象关系映射)库,允许开发者用Ruby...

    Rails3常用命令行命令

    Rails3 是 Ruby on Rails 框架的一个版本,它提供了一系列强大的命令行工具,使得开发者可以快速地构建和管理Web应用。在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个...

    Rails 3 in Action

    《Rails 3 in Action》是2011年由Ryan Bigg撰写的一本关于Ruby on Rails框架的权威指南,专门针对当时最新的Rails 3.1版本进行了深入解析。这本书旨在帮助开发者充分利用Rails 3.1的强大功能,提升Web应用开发的效率...

Global site tag (gtag.js) - Google Analytics