无法找到没有ID的帖子

时间:2012-06-19 00:56:40

标签: ruby-on-rails ruby ruby-on-rails-3 tags

我正在尝试将我的帖子标记为某个标记以进行渲染。我在视图中的代码是

查看/帖/ 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

2 个答案:

答案 0 :(得分: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 %>

答案 1 :(得分:0)

基于此处显示的问题,部分问题是您在控制器中使用Post对象定义实例变量,然后不在视图中的任何内容中使用它们。要检索标记为“sports”的所有帖子的集合,您需要在控制器中执行以下操作:

@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)

这与您的片段不同,您的片段定义了一个@posts变量,它返回10个Post个对象的集合,而@post只根据传递的id找到一个post对象通过提交表格params。我的猜测是这个控制器动作不是由表单提交创建的,因此没有传递参数,因此params[:id]为零,因此您看到错误消息。在任何情况下,除非您在视图中需要这些项目(并且此处没有任何内容表明它们被用于任何事物),否则没有理由创建它们。

您需要的是一系列标记为“sports”的帖子,这就是上述调用所完成的内容。看起来您正试图在视图中使用post.find_by_tag("sports")执行此操作。问题是您在find_by_tag上调用post方法,其中不存在Post存在 - 这是Post类,可能是你打电话的意思。只需将post更改为Post,您就可以获得所需的内容,但如果您在控制器中创建对象,然后使用视图简单地呈现其属性数据,则内容检索和呈现会更好地分开(上面的例子。)