2

如何在另一个页面上从数据库返回数据?

我可以将其归档在:views/posts/index.htm.erb

<h1>Listing posts</h1>

<table>
  <tr>
    <th>Titulo</th>
    <th>Conteudo</th>
    <th>Categoria</th>
    <th>Criado em</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @posts.each do |post| %>
  <tr>
    <td><%= post.titulo %></td>
    <td><%= post.conteudo %></td>
    <td><%= post.category.name %></td>
    <td><%= post.created_at.strftime("%d/%m/%Y") %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Delete', post, confirm: 'Are you sure?', method: :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New Post', new_post_path %>

而我想在另一个页面上显示这些值:views/home/blog.html.erb

我该怎么做呢?您能否解释所有步骤,以便我可以在我的其他页面中显示这些值。


谢谢 Kocur4d

但我怎样才能得到一些信息?例如:我希望它以这种方式出现在帖子页面的标题中(在 blog.html.erb 中):

<div class="post-title">
<h2 class="title"> <a href="link_to_post"> **<% = post.titulo%>** </ a> </ h2>
</ div>
4

2 回答 2

3

步骤 1. 创建控制器

在您的应用程序根目录中运行:

rails g controller home blog

修改controllers/homes_controller.rb

class HomesController < ApplicationController
  def blog
    @posts = Post.all
  end
end

你的 controllers/posts_controller.rb 应该已经设置好了。您的问题需要的最低限度是定义索引方法,您可能还有其他方法:

class PostsController < ApplicationController
  def index
    @posts = Post.all
  end
end

步骤 2. 提取部分

更改视图/帖子/index.htm.erb

<h1>Listing posts</h1>

<%= render partial: 'shared/posts', object: @posts %>

<%= link_to 'New Post', new_post_path %>

创建/修改视图/home/blog.html.erb

<h1>Listing posts</h1>

<%= render partial: 'shared/posts', object: @posts %>

<%= link_to 'New Post', new_post_path %>

创建视图/共享/_posts.html.erb

<table>
  <tr>
    <th>Titulo</th>
    <th>Conteudo</th>
    <th>Categoria</th>
    <th>Criado em</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% posts.each do |post| %>
  <tr>
    <td><%= post.titulo %></td>
    <td><%= post.conteudo %></td>
    <td><%= post.category.name %></td>
    <td><%= post.created_at.strftime("%d/%m/%Y") %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Delete', post, confirm: 'Are you sure?', method: :delete %></td>
  </tr>
 <% end %>
</table>

步骤 3. 设置路线。

您的 routes.rb 文件中应该有类似的内容:

resources :posts or match 'posts/index' => 'posts#index'

将此添加到config/routes.rb

match 'home/blog' => 'home#blog'

所以它可能看起来像这样(有几个变种):

配置/路由.rb

YourAppName::Application.routes.draw do 
  root to: 'posts#index'
  resources :posts

  match 'home/blog' =>  'home#blog'
end

现在,当您启动 rails 服务器(假设标准配置)并访问:

127.0.0.1:3000/posts/index127.0.0.1:3000/home/blog

你应该看到相同的内容。

这应该可以复制和粘贴,但我可能会犯一些拼写错误和其他小错误(希望不会,如果发现任何错误,请尽快编辑它们)。一般来说,您需要 3 个步骤将 http 请求转发到您的 Rails 应用程序堆栈。

  1. 使用路由将 url 映射到控制器。
  2. 创建控制器并在内部为视图准备数据。
  3. 在视图中显示数据。

Rails GuidesRails for ZombiesRails Tutorial中查看更多信息。

---------更新你的第二个问题-----------

我真的不明白你想达到什么目的??目前 index.html.erb 和 blog.html.erb 都显示相同的数据,这就是你想要的吗?

post代表一个帖子,在 sharde/_posts.html.erb 中可用。您不能从 index.html.erb 或 blog.html.erb 中引用它。

@posts代表所有帖子及其在 index.html.erb 或 blog.html.erb 中可用。

渲染部分:'shared/posts',对象:@posts——这一行说“嘿,伙计!在这里粘贴共享/帖子文件的内容,顺便说一句,我这里有一个局部变量@posts,所以如果你需要在共享/发布文件不适命名它从那里发布“

为了使它们看起来不同,请修改两个文件,并且它们都相同的部分位于 sharde/_posts.html.erb 中。

尝试例如删除此行:

<td><%= post.category.name %></td>

从共享文件中查看会发生什么。

添加一些html标签和思想家。

Rails has may helper methods available' to find out about them check the links I give you and google, google, google.

Try to add some links with link_to helper

于 2013-03-03T01:24:11.923 回答
0

在您的家庭控制器中,对于 blog 方法,根据需要设置 @posts ...也许

@posts = Post.all
于 2013-03-02T23:53:05.127 回答