ステップ 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 %>
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'
したがって、次のようになります(バリエーションはほとんどありません):
config/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
同じコンテンツが表示されるはずです。
これはコピーアンドペーストで機能するはずですが、タイプミスやその他の小さな間違いを犯す可能性があります(うまくいかない場合は、できるだけ早く編集してみてください)。httpリクエストをRailsアプリケーションスタックに転送するには3つのステップが必要なので、一般的に見てください。
- ルートを使用して URL をコントローラーにマップします。
- コントローラーを作成し、内部でビュー用のデータを準備します。
- ビューにデータを表示します。
詳細については、Rails Guides、Rails for Zombies、Rails Tutorialを参照してください。
---------2 番目の質問に更新-----------
何を達成したいのかよくわかりませんか?? 現時点では、index.html.erb と blog.html.erb の両方が同じデータを表示していますが、それはあなたが求めていたものでしたか?
postは 1 つの投稿を表し、sharde/_posts.html.erb で利用できます。index.html.erb や blog.html.erb からは参照できません。
@postsはすべての投稿を表し、index.html.erb または blog.html.erb で利用できます。
render partial: 'shared/posts', object: @posts -- この行は、「やあ、共有/投稿ファイルの内容をここに貼り付けてください。ところで、ここにローカル変数 @posts があるので、その日付を使用する必要がある場合は、共有/投稿ファイルは、そこから投稿する名前を付けます」
それらを異なるものにするには、両方のファイルを変更し、それらの両方で同一になる部分は sharde/_posts.html.erb にあります。
たとえば、次の行を削除してみてください。
<td><%= post.category.name %></td>
共有ファイルから何が起こるかを確認します。
いくつかの html タグと思想家を追加します。
Railsには利用可能なヘルパーメソッドがたくさんあります.
link_toヘルパーでいくつかのリンクを追加してみてください