我正在开发类似于博客网站的rails应用程序。我的模型中有四个属性:header
,notice
,tag
,post_date
(事件当天)。
当我尝试在我的rails控制台中找到日期为今天的帖子时,它会返回今天post_date
的帖子。
Post.find_by(post_date: Time.new.to_date.to_s)
但是当我尝试在static_pages_controller
中实现它时,它会显示以下错误:
match ? attribute_missing(match, *args, &block) : super
以下是我在static_pages_controller
中对控制器的定义:
def about
@post = Post.find_by(post_date: Time.new.to_date.to_s)
end
我在哪里做错了?
这是我的static_pages_controller.rb
class StaticPagesController < ApplicationController
def help
@search = Post.search do
fulltext params[:search]
end
@post = @search.results
end
def home
if params[:tag]
@post = Post.tagged_with(params[:tag])
else
@post = Post.all
end
end
def about
@post = Post.find_by(post_date: Time.new.to_date.to_s)
end
end
以下是我的about.html.erb
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class = "container">
<% @post.reverse.each do |t| %>
<div class = "col-md-10 blogShort">
<div class= "post-home">
<h3><%= t.header %></h3>
<hr>
<article>
<p>
<%= t.notice %>
</p>
</article>
<hr>
<p>Tags: <%= raw t.tag_list.map { |t| link_to t, tag_path(t) }.join(', ') %></p>
</div>
</div>
<% end %>
<!-- </div> -->
</div>
</body>
</html>
答案 0 :(得分:2)
原因是在#home
和#help
方法中,@post
代表了一组帖子。
在#about
中,由于您使用的是find_by
,因此rails会返回Post
的单个实例。当您尝试使用@post.reverse
时,这会出现问题,因为@post
是单个对象,并且不响应reverse
和each
等方法。
不是在视图中使用@post.reverse.each
,而是删除此部分,而是使用@post
代替t
。