如何在其他页面上从数据库返回数据?
我可以在: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>
答案 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应用程序堆栈。
在Rails Guides,Rails for Zombies和Rails 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