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 -> 部分视图的操作方法的主要内容,如果未能解决你的问题,请参考以下文章
在 Ruby on Rails 3.2+ 中流式传输部分视图