【问题标题】:Render view from another view : controller not called从另一个视图渲染视图:未调用控制器
【发布时间】:2014-04-15 06:40:31
【问题描述】:

我正在开发一个类似应用程序的小型博客,目前我遇到了一个我无法解决的问题。

我目前有 2 个模型:
1. 发布
2. 评论

我已经可以毫无困难地管理我的帖子,但我在使用 cmets 时遇到了一些问题。我选择在我的帖子和我的评论模型之间建立关系 has_many / belongs_to。当用户在帖子页面上时,我想显示与帖子相关的所有 cmets。我的 erb 看起来像这样:

#some code
#...
#...
#render the comments
<%= render :template => "comments/index", :locals => {:post_id => @post.id} %>

我的问题是我的 CommentsController 中的方法索引永远不会被调用。我在 index 方法中放了一些 puts,它们从不显示在控制台中。

我应该使用另一个标签来呈现视图吗?还有其他方法吗?

提前感谢您的帮助。

【问题讨论】:

  • renders 仅查看次数。
  • render 只渲染视图。它不会命中相关的控制器和动作。
  • 嗯,我明白了,那我应该怎么做才能达到预期的行为?
  • 也许您可以将其渲染为部分。

标签: ruby-on-rails ruby


【解决方案1】:

如果帖子视图是唯一显示cmets的页面,则不必调用comments/index获取cmets,只需在渲染帖子视图时显示cmets即可,例如

在您的帖子视图中

#some code
#...
# render comments
<% @post.comments.each do |c| %>
  <%= c.content%>
  # ...
<% end %>

如果在许多视图中使用 cmets,则将它们放在带有 post 参数的部分中

在 app/views/partials/_cmets.html.erb 中

# render comments
<% post.comments.each do |c| %>
  <%= c.content%>
  # ...
<% end %>

并在您要显示 cmets 的位置渲染此部分:

#some code
#...
# render comments
<%= render partial: "partials/comments", locals: { post: @post } %>

使用comments/index 获取 cmets 并在视图中显示它们更有可能是 Javascript/AJAX 等前端技术来动态加载页面部分。在这种情况下,comments/index 更可能是 API 调用(呈现 JSON 格式而不是 html 视图)。

【讨论】:

  • 是的,但我想要 cmets 列表和添加评论的表单,这就是为什么我想在不同的视图中拆分所有内容。
  • 我认为您应该将它们分成部分,而不是视图。一个视图可以包含许多部分,但不能包含视图。您可以将评论列表放在一个部分中,将评论表单放在另一个中。在这种情况下,不使用CommentsController#newCommentsController#index 操作,部分中使用的变量应放在PostsController#show 中。
  • 我要试试这个方法。我认为拆分代码会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 2011-04-23
  • 2023-03-12
相关资源
最近更新 更多