Rails -> 部分视图的操作方法

Posted

技术标签:

【中文标题】Rails -> 部分视图的操作方法【英文标题】:Rails -> action method for partial views 【发布时间】:2015-05-24 14:40:28 【问题描述】:

我对 Rails 很陌生,想知道如何为部分渲染指定/分配操作方法(在控制器内)。

例如,

我有模型 A,它与 cmets 相关联(我们称之为模型 B)。模型 B 有一个局部视图的构造,它是从模型 A 中的视图调用的 -->

<%= render :partial => "comments/form", :controller => "comments", :action => "form %>

当模型 A 从模型 B 调用此部分渲染时,如何在模型 B 的控制器中定义一个方法,以便在模型 A 每次请求此视图时调用?例如,每次模型 A 调用部分渲染时,都会调用模型 B 控制器中定义的“表单”方法。提前致谢!!

class CommentsController < ApplicationController

    def form
        flash[:notice] = "Comment was successfully loaded."
    end

end

【问题讨论】:

【参考方案1】:

有可能,这只是一个非常糟糕的主意。

我认为你在这里有点困惑。在 MVC 控制器中,将模型传递给视图。模型不(也不应该)知道它们被传递给视图或在局部中呈现。

模型处理数据和业务逻辑,视图将其呈现给用户,控制器处理响应用户输入并将其传递给模型。

在 Rails 中,每个请求都由单个控制器处理。在您的情况下,您需要执行以下操作:

class PostsController < ApplicationController
  def show
    @post = Post.includes(:comments).find(params[:id])
    @comments = @post.comments
    flash[:notice] = "Comments loaded." if @comments.any?
    render :show
  end
end

如果您想在控制器之间重用代码,可以使用concerns。

【讨论】:

欣赏背景和答案,很有帮助。

以上是关于Rails -> 部分视图的操作方法的主要内容,如果未能解决你的问题,请参考以下文章

独立测试rails部分视图

Rails 中的分析视图

在 Ruby on Rails 3.2+ 中流式传输部分视图

Ajax 和 Rails 4:创建实例变量并更新视图而不刷新

Rails Ajax 在保留参数时刷新部分

Rails 找不到我的部分。缺少部分错误