步骤 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/index和127.0.0.1:3000/home/blog
你应该看到相同的内容。
这应该可以复制和粘贴,但我可能会犯一些拼写错误和其他小错误(希望不会,如果发现任何错误,请尽快编辑它们)。一般来说,您需要 3 个步骤将 http 请求转发到您的 Rails 应用程序堆栈。
- 使用路由将 url 映射到控制器。
- 创建控制器并在内部为视图准备数据。
- 在视图中显示数据。
在Rails Guides、Rails for Zombies和Rails 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