Rails属性丢失匹配? attribute_missing(match,* args,& block):super

时间:2015-10-15 18:10:26

标签: ruby-on-rails ruby model-view-controller

我正在开发类似于博客网站的rails应用程序。我的模型中有四个属性:headernoticetagpost_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>

1 个答案:

答案 0 :(得分:2)

原因是在#home#help方法中,@post代表了一组帖子。

#about中,由于您使用的是find_by,因此rails会返回Post的单个实例。当您尝试使用@post.reverse时,这会出现问题,因为@post是单个对象,并且不响应reverseeach等方法。

不是在视图中使用@post.reverse.each,而是删除此部分,而是使用@post代替t