Rails:如何从另一个控制器渲染局部视图

时间:2014-07-30 14:58:48

标签: ruby-on-rails

我正在制作一个reddit克隆。现在我有一个可以运行的投票系统,但每次用户投票时它都会刷新页面。我想通过使用AJAX使这个异步。

使按钮响应Jquery非常困难,因为它们根据用户对帖子的投票方式改变状态。我想出的解决方案是:在_upvote部分中有2个upvote按钮,在_downvote partial中有2个downvote按钮。每个部分将有一个投票按钮,当案例已经为真时激活,并再次点击它将销毁它(例如,如果已经投票的帖子,则重新点击upvote按钮将销毁它)。部分中的其他按钮将在尚未使用按钮的情况下被激活(在这种情况下,单击按钮将创建它)。

实施例: **** _upvote partial应该包含以下按钮:****

1)create_upvote

2)destroy_upvote

**** downvote partial应该包含以下按钮:****

1)create_downvote

2)destroy_downvote

无论哪个按钮被激活都取决于控制器。

我的问题是:

1)来自另一个控制器的渲染局部视图的实际语法是什么?例如:posts正在呈现_post,在其中我希望呈现_upvote或_downvote。如何从控制器渲染_upvote或_downvote。同样,我想从控制器渲染这些部分的原因是因为控制器将改变它们的状态。

Downvotes partial

应用/视图/帖/ _downvote.html.erb

_downvotes partial

Upvotes partial

应用/视图/帖/ _downvote.html.erb

_upvotes partial

发布部分

应用/视图/帖/ _post.html.erb

_post partial

Downvotes controller

Downvotes controller

Upvotes controller

Upvotes controller

控制器中的第9行是我的语法关闭的地方!在_posts部分中呈现_upvote和_downvote partials的语法是什么?谢谢伙伴们!

2 个答案:

答案 0 :(得分:5)

就语法而言,您想要的是以下内容:

render partial: "posts/upvote"

不是将html数据(你提到的按钮)从控制器发送到部分,你应该在每个部分中都有一个条件语句来激活一个或另一个按钮。从那里为每个相应的按钮创建事件处理程序。这解决了Jquery处理内部状态的问题。

答案 1 :(得分:0)

只是对 views/layouts/_upvote.html.erb 内特殊部分的特殊演员表的一个小说明,您应该使用

render partial: "layouts/upvote"

(不是 application/upvote