Ruby on rails 不能';我找不到没有身份证的帖子
我正试图让我的文章带有一个特定的标签来呈现。我在视图中的代码是 Views/posts/sports.html.erbRuby on rails 不能';我找不到没有身份证的帖子,ruby-on-rails,ruby,ruby-on-rails-3,tags,Ruby On Rails,Ruby,Ruby On Rails 3,Tags,我正试图让我的文章带有一个特定的标签来呈现。我在视图中的代码是 Views/posts/sports.html.erb <% my_posts = post.find_by_tag("sports") %> <%= my_posts.each do |post| %> <%= post.title %><br /> <%= post.body %><br /> <% end %> 我知道我
<% my_posts = post.find_by_tag("sports") %>
<%= my_posts.each do |post| %>
<%= post.title %><br />
<%= post.body %><br />
<% end %>
我知道我必须定义@post变量,但我不确定该定义什么
更新
我遇到的问题是“找不到没有ID的帖子”错误
第二次更新
def find_by_tag name
Tag.find_by_name(name).posts
end
你不说哪里出了问题,你只说你想做什么 以下几点有助于调试您看到的内容:
<%= debug(params) if Rails.env.development? %>
确保您正在查找正确的参数键
在您提供的代码片段中,在my_posts前面有一个等号。每…
行,我不是ERB专家,但我想您不会想要这样,而是:
<% my_posts = post.find_by_tag("sports") %>
<% my_posts.each do |post| %>
<%= post.title %><br />
<%= post.body %><br />
<% end %>
根据此处显示的内容,部分问题在于您正在控制器中使用Post对象定义实例变量,然后在视图中不使用它们。要检索标记为“sports”的所有帖子的集合,请在控制器中执行以下操作:
@sports_posts = Post.find_by_tag("sports")
并且认为:
<% @sports_posts.each do |post|
etc...
这与代码段不同,在代码段中定义了一个@posts
变量,该变量返回10个Post
对象的集合,而@Post
则根据提交表单参数传递的id查找Post对象。我的猜测是,此控制器操作不是通过表单提交创建的,因此没有传递任何参数,因此params[:id]
为零,因此您会看到错误消息。无论如何,除非您在视图中需要这些项目中的任何一个(并且这里没有任何迹象表明它们被用于任何用途),否则没有理由创建它们
你真正需要的是一个标记为“运动”的帖子集合,这就是上面的调用所实现的。看起来您正试图使用
post.find by_tag(“sports”)
在视图中查找。问题是您正在调用post
上的find\u by_标记
方法,该方法不存在Post
存在-这就是Post类,可能就是您要调用的。只需将post
更改为post
就可以达到您想要的目的,但如果您在控制器中创建对象,然后使用视图简单地呈现其属性数据,则内容检索和显示会更好地分开(根据上面的示例)。params[:id]必须为空(nil)?我刚刚更新了这个问题,谢谢你指出这一点。首先,我想非常感谢你对我的问题给出了很好的回答。我非常感谢您为帮助我解决问题所付出的细致和努力。我尝试了您的解决方案,但收到的新错误是未定义find_by_标记。它当前是在我的Post模型中定义的,调用在我的show.html.erb和_Post.html.erb视图中工作,但由于某些原因,此控制器在该视图中不工作。我将更新我的问题,以显示我是如何在模型中定义它的。您使用的是acts_as_taggable_on还是其他库?如果是这样的话,它们提供了特定的方法来获取标记了某个值的对象集合。例如,acts_as_taggable_on提供了一个“tagged_with”方法,因此您只需将我上面的第一行替换为@sports_posts=Post.tagged_with(“sports”).paginate(…)
,而不必费事想出自己的方法。另外请注意,您的方法是不必要的-标记。按名称(“某物”)查找。posts
将返回与名为“sports”的标记相关联的posts对象集合,这正是您所需要的。首先,我没有使用acts作为标记,我正在使用Railcast中找到的与虚拟属性相关的代码。我找不到一个合适的教程或解释如何实现acts_as_taggable,所以我决定采用这种方式,这是实现的最后一个障碍。这更难。很抱歉,您没有找到适合您的教程-我认为《创业板自述》相当不错-但它确实深入到复杂的案例中,因此不容易看到它在最简单的案例中是如何工作的。我真的建议你试着度过难关。这里的安装说明是针对Rails2的(使用Rails3的自述说明),但是关于用法的部分更简单。很抱歉,我帮不上什么忙。我找到了一个有用的教程,能够实现acts-as_-taggable-on,所以谢谢你让我重新考虑这个选项。对于任何其他看这篇文章需要帮助的人,链接是
@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)