【问题标题】:Rails: How to render partial view from another controllerRails:如何从另一个控制器渲染局部视图
【发布时间】:2014-07-30 14:58:48
【问题描述】:

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

让按钮响应 Jquery 确实很难,因为它们会根据用户对帖子的投票方式改变状态。我想出的解决方案是:在 _upvote 部分中有 2 个赞成按钮,在 _downvote 部分中有 2 个反对按钮。每个部分都会有一个投票按钮,当案例已经成立时,它会被激活,再次点击它会破坏它(例如,如果一个帖子已经被点赞了,那么再次点击点赞按钮会破坏它)。部分中的其他按钮将在该按钮尚未使用的情况下被激活(在这种情况下单击该按钮将创建它)。

示例: **** _upvote 部分应包含以下按钮:****

1)create_upvote

2)destroy_upvote

****downvote 部分应包含以下按钮:****

1)create_downvote

2)destroy_downvote

激活哪个按钮取决于控制器。

我的问题是这样的:

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

部分反对

app/views/posts/_downvote.html.erb

部分支持

app/views/posts/_downvote.html.erb

帖子部分

app/views/posts/_post.html.erb

否决控制器

投票控制器

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

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

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

render partial: "posts/upvote"

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

【讨论】:

    【解决方案2】:

    只是对views/layouts/_upvote.html.erb 中的特殊部分的一个小注释,你应该使用

    render partial: "layouts/upvote"
    
    

    (不是application/upvote)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2013-06-02
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多