将数据从数据库返回到rails中的另一个页面

时间:2013-03-02 22:31:33

标签: ruby-on-rails database

如何在其他页面上从数据库返回数据?

我可以在: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>

2 个答案:

答案 0 :(得分:3)

步骤1.创建控制器

在您的app根目录中运行:

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.提取部分

更改 views / posts / index.htm.erb

<h1>Listing posts</h1>

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

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

创建/修改 views / home / blog.html.erb

<h1>Listing posts</h1>

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

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

创建 views / shared / _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'

所以它可能看起来像这样(变种很少):

<强>配置/ routes.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/index 127.0.0.1:3000/home/blog

你应该看到相同的内容。

这应该可以复制并粘贴,但我可以制作一些拼写错误和其他小错误(希望不会,如果生病了,请尽快编辑它们)。一般来看一下,因为您需要3个步骤来将http请求转发到rails应用程序堆栈。

  1. 使用路线将网址映射到控制器。
  2. 为视图创建控制器和内部准备数据。
  3. 在视图中显示数据。
  4. Rails GuidesRails for ZombiesRails Tutorial中查看以获取更多信息。

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

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

    代表一个帖子的

    帖子,可在sharde / _posts.html.erb中找到。您无法从index.html.erb或blog.html.erb中引用它。

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

    渲染局部:'共享/帖子',对象:@posts - 此行说“嘿伙计!粘贴共享/帖子文件的内容,顺便说一下,我这里有一个局部变量@发布所以,如果您需要在共享/帖子文件中使用该日期,那么它的名字会从“

    ”的一侧发布

    为了使它们看起来不同,修改两个文件和两个文件相同的部分是在sharde / _posts.html.erb中。

    尝试删除此行:

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

    从共享文件中查看将要发生的事情。

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

    Rails有可能帮助方法'找出他们检查我给你的链接和谷歌,谷歌,谷歌。

    尝试使用 link_to 帮助

    添加一些链接

答案 1 :(得分:0)

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

@posts = Post.all