从另一个控制器渲染一个动作的模板

Rendering an Action's Template from Another Controller

我正在开发一个项目,该项目在以下设计论坛上有帖子和评论。我正在阅读 ruby 指南 http://guides.rubyonrails.org/layouts_and_rendering.html#overview-how-the-pieces-fit-together,它说要从另一个动作中呈现一个动作模板,我需要使用类似这样的东西 render "posts/index"

我正在尝试打印该论坛中某个论坛的所有帖子。我已经设置了数据库和模型,但不确定如何处理控制器。

如何在 forums/show/i 中调用 posts/index(其中 i 是论坛的 ID)。

如何打印论坛中的帖子以及如何只打印与该特定论坛相关的帖子?

当我尝试在论坛控制器的 index 函数中调用 render "posts/index" 时,我收到此错误消息:

ActionView::MissingTemplate in Forums#show 


Showing /home/ubuntu/workspace/app/views/forums/show.html.erb where line #26 raised:

Missing partial posts/_index with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
  * "/home/ubuntu/workspace/app/views"
  * "/usr/local/rvm/gems/ruby-2.3.4/gems/devise-4.3.0/app/views"

<%= render 'posts/index' %>

以上用红色高亮显示

感谢您的宝贵时间。

既然你有相互关联的模型,我会这样做。在您的论坛显示视图中:

<%= render partial: 'posts/index', locals: {forum: @forum} %>

然后创建局部视图 posts/_index。html.erb:

<% forum.posts.each do |post| %>
   <div><%= post.your_attributes %></div>
   <div><%= render partial: 'comments/index', locals: {forum: forum, post: post} %>
<% end %>

最终创建局部视图comments/_index。html.erb:

<% post.comments.each do |comment| %>
    <div><%= comment.your_attributes %><div>
<% end %>

locals 选项将这些变量传递给您的局部变量以便在那里可用。