首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重用Rails中嵌套控制器的呈现操作?

如何重用Rails中嵌套控制器的呈现操作?
EN

Stack Overflow用户
提问于 2013-01-23 17:56:18
回答 1查看 774关注 0票数 0

我有一个关于在控制器操作中重用代码的问题。我认为这是一个相当标准的情况,所以我对Rails中的最佳实践很感兴趣。

假设我有一个具有相应FilmsControllerFilmsController资源,它有一个由CommentsController提供的嵌套资源comments。嵌套资源可以使用其indexshow操作单独呈现。但是,也应该能够将嵌入在相应电影页面中的评论呈现出来。

现在,问题是,在CommentsController中重用FilmsController.show中的代码的最佳方法是什么?

1)强制CommentsController.index呈现为字符串,然后将其在变量中传递给电影视图?

或者2)直接调用电影视图中的CommentsController.index作为一种“部分”,从那里执行数据库查询?

或者3)在CommentsController中创建一个单独的方法,负责数据库处理,从CommentsController.indexFilmsController.show调用它,并在两个地方都使用相应的视图?

在我看来,选项1)和( 2)看起来有点混乱,而3)不是模块化的,需要重复一些代码。有什么更好的方法来实现这一点吗?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2013-01-23 20:02:02

现在,问题是,在CommentsController中重用FilmsController.show中的代码的最佳方法是什么?

您可以将共享控制器逻辑移动到应用程序控制器(或库,并适当地要求它)中的一个la:

代码语言:javascript
复制
class ApplicationController < ActionController::Base

  def foo
    @foo = "foo"
  end

end

财务主任:

代码语言:javascript
复制
class CommentsController < ApplicationController

  before_filter :foo, :only => [:index]

  def index    
  end

end

电影总监:

代码语言:javascript
复制
class FilmsController < ApplicationController

  before_filter :foo, :only => [:show]

  def show
  end

end

对于重复的视图逻辑,您可以将其移动到一个公共文件夹,比如your_app/app/views/shared/_foo.html.erb并适当地呈现它。

另一种选择是将相关代码放入外部模块:

lib/mymodule.rb

代码语言:javascript
复制
module MyModule
  def foo
  end
end

然后,您可以将模块包含在控制器内或任何您想访问foo方法的地方。

代码语言:javascript
复制
class CommentsController < ApplicationController
  include MyModule

    def index
      foo()
    end

end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14486224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档