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 的帖子”错误

第二次更新

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

2 回答 2

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 回答
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 找到一个 post 对象。我的猜测是,此控制器操作不是由表单提交创建的,因此没有传递任何参数,因此为 nil,因此您会看到错误消息。无论如何,除非您在视图中需要这些项目中的任何一个(并且这里没有任何内容表明它们被用于任何事情),否则没有理由创建它们。Post@postparams[:id]

您需要的是一组标记为“运动”的帖子,这就是上面的调用所完成的。看起来您正在尝试post.find_by_tag("sports")在视图中执行此操作。问题是您正在调用不存在find_by_tag方法 on 。存在 - 那是 Post 类,可能是你要调用的。只是更改为可能会让您到达您想要的位置,但是如果您在控制器中创建对象然后使用视图简单地呈现它们的属性数据(根据上面的示例),则内容检索和呈现会更好地分开。postPostpostPost

于 2012-06-19T01:58:04.660 回答