【问题标题】:Ruby on Rails: How to display posts on a static home pageRuby on Rails:如何在静态主页上显示帖子
【发布时间】:2018-04-07 05:15:16
【问题描述】:

我正在编写一个 Rails 应用程序,我想做的是在主页上显示所有帖子。我有一个用于主页来源的静态页面的控制器和另一个用于帖子的控制器。到目前为止,我有这个:

home.html.erb

<% @posts.each do |post| %>
  <%= post.comment %>
<% end %>

帖子控制器

def home 
 @posts = Post.order("created_at desc").limit(5)
end

我通过查看其他答案获得了大致的想法,但即使我在数据库中有多个帖子,我仍然会收到 undefined method 'each' for nil:NilClass 错误。

到目前为止,如果这种关系完全影响到社区,社区就会有很多帖子。 谢谢。

静态页面控制器

class PagesController < ApplicationController
  def show
    render template: "pages/#{params[:page]}"
  end
end

【问题讨论】:

  • 您收到此错误的行号。您可以发布带有错误详细信息的 development.log
  • 你的静态页面控制器是什么样子的?
  • class PagesController
  • 请分享服务器日志本身的错误回溯。

标签: ruby-on-rails ruby


【解决方案1】:

默认情况下,没有什么可以告诉您的StaticController 执行您在PostsController 中的home 操作。

Vishal 是正确的,因为您可能应该将逻辑移至 StaticController,但是仍然没有什么可以调用该操作。

一种解决方案是在您的 #index 路由中实例化 @posts,这样当有人访问索引时,就会执行该逻辑。

在我看来,更好的解决方案是在您的 StaticController 中将 #home 设为私有方法(也许将其重命名为更具描述性的名称...我在下面使用了 load_posts),然后在顶部文件的创建一个before_action 告诉Rails 在渲染index 时你想要#load_posts 的内容

class StaticController < ApplicationController

  before_action :load_posts, only: :index

  def index
    #logic for your index
  end

  private

  def load_posts
    @posts = Post.order("created_at desc").limit(5)
  end

end

【讨论】:

    【解决方案2】:

    也许,只需将您的代码@posts = Post.order("created_at desc").limit(5) 放入该静态页面控制器? PostsController 默认不渲染home.erb.html,它有自己的视图。

    【讨论】:

    • 我也试过了(我把它放在一个帖子模块中)但无济于事,我真的很难过我错过了什么。
    【解决方案3】:

    正如您所说,主页来自哪里有静态控制器,那么我不确定您为什么要在Posts Controller 中为主页创建不同的操作。将您的 home 动作放在静态控制器中。

    静态控制器

    def home 
     @posts = Post.order("created_at desc").limit(5)
    end
    

    【讨论】:

    • 我现在已经尝试过了,但它仍然给了我完全相同的错误。你还有什么可以想到的吗?我对 Rails 很陌生,所以我不知道我还能尝试什么。
    • 根据我对chatty questions 的建议,无需在您的所有答案中添加“希望这有帮助”。所有发帖者都希望他们的材料有所帮助,在技术写作中没有必要。
    猜你喜欢
    • 2015-07-13
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多