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 %>

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つのステップが必要なので、一般的に見てください。

  1. ルートを使用して URL をコントローラーにマップします。
  2. コントローラーを作成し、内部でビュー用のデータを準備します。
  3. ビューにデータを表示します。

詳細については、Rails GuidesRails for ZombiesRails 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ヘルパーでいくつかのリンクを追加してみてください

于 2013-03-03T01:24:11.923 に答える
0

ホームコントローラーで、ブログメソッドの場合、必要に応じて @posts を設定します...多分

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