0

レンダリングする特定のタグでタグ付けされた投稿を取得しようとしています。ビュー内の私のコードは

ビュー/投稿/sports.html.erb

 <% my_posts = post.find_by_tag("sports") %>
 <%= my_posts.each do |post| %>
    <%= post.title %><br />
    <%= post.body %><br />
 <% end %>

このための私のコントローラーは次のようになります

 def sports
     @posts = Post.paginate(:page => params[:page], :per_page => 10)
     @post = Post.find(params[:id])
     @title = "Newest"


     respond_to do |format|
       format.html
       format.json { render :json => @users }
     end
 end

@post 変数を定義する必要があることはわかっていますが、それを何として定義すればよいかわかりません。

アップデート

私が抱えている問題は、「ID のない投稿が見つかりませんでした」というエラーです。

2回目の更新

   def find_by_tag name 
     Tag.find_by_name(name).posts 
   end
4

2 に答える 2

0

ここに示されている内容に基づく問題の一部は、コントローラーで Post オブジェクトを使用してインスタンス変数を定義し、ビューでそれらを使用していないことです。「スポーツ」とタグ付けされたすべての投稿のコレクションを取得するには、コントローラーで次のようにします。

@sports_posts = Post.find_by_tag("sports")

そしてビューで:

<% @sports_posts.each do |post|
  etc...

ページネーションを追加するには、そのメソッドを元のメソッドにチェーンするだけです:

@sports_posts = Post.find_by_tag("sports").paginate(:page => params[:page],
                                                    :per_page => 10)

これは、10 個のオブジェクト@postsのコレクションを返す変数を定義し、送信フォーム パラメータによって渡された ID に基づいて投稿オブジェクトを見つけるだけのスニペットとは異なります。私の推測では、このコントローラーのアクションはフォームの送信によって作成されていないため、パラメーターが渡されず、したがってnil であるため、エラー メッセージが表示されます。いずれにせよ、これらのアイテムのいずれかがビューに必要でない限り (そして、それらが何かに使用されていることを示唆するものは何もありません)、それらを作成する理由はありません。Post@postparams[:id]

必要なのは、「スポーツ」というタグが付けられた投稿のコレクションです。これは、上記の呼び出しによって実現されます。ビューでそれをやろうとしているようですpost.find_by_tag("sports")問題は、存在しないonでfind_by_tagメソッドを呼び出していることです。存在します - それは Post クラスであり、おそらくあなたが呼び出している意味です。に変更するだけでおそらく目的の場所に到達できますが、コントローラーでオブジェクトを作成し、ビューを使用してそれらの属性データを単純にレンダリングすると、コンテンツの取得と表示がより適切に分離されます (上記の例に従って)。postPostpostPost

于 2012-06-19T01:58:04.660 に答える
0

何がうまくいかないのかは言わず、何をしようとしているのかだけを言います。

表示されているものをデバッグするのに役立ついくつかのこと:

<%= debug(params) if Rails.env.development? %>

メイン レイアウトでは、これにより params ハッシュがダンプされ、手がかりが得られる場合があります。

また、

rake routes

正しいパラメーター キーを探していることを確認してください。

あなたが提供したスニペットでは、my_posts.each ...行の前に等号があります。私はERBの専門家ではありませんが、あなたはそれを望んでいないと思います。代わりにこれ:

<% my_posts = post.find_by_tag("sports") %>
<% my_posts.each do |post| %>
  <%= post.title %><br />
  <%= post.body %><br />
<% end %>
于 2012-06-19T01:23:31.780 に答える