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

时间:2017-12-01 21:22:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

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

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

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

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

当我尝试调用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' %>

以上是红色突出显示。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

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

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

然后创建部分视图帖子/ _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选项将这些变量传递给您的部分可在那里使用。