我有一个关于在控制器操作中重用代码的问题。我认为这是一个相当标准的情况,所以我对Rails中的最佳实践很感兴趣。
假设我有一个具有相应FilmsController的FilmsController资源,它有一个由CommentsController提供的嵌套资源comments。嵌套资源可以使用其index和show操作单独呈现。但是,也应该能够将嵌入在相应电影页面中的评论呈现出来。
现在,问题是,在CommentsController中重用FilmsController.show中的代码的最佳方法是什么?
1)强制CommentsController.index呈现为字符串,然后将其在变量中传递给电影视图?
或者2)直接调用电影视图中的CommentsController.index作为一种“部分”,从那里执行数据库查询?
或者3)在CommentsController中创建一个单独的方法,负责数据库处理,从CommentsController.index和FilmsController.show调用它,并在两个地方都使用相应的视图?
在我看来,选项1)和( 2)看起来有点混乱,而3)不是模块化的,需要重复一些代码。有什么更好的方法来实现这一点吗?
非常感谢!
发布于 2013-01-23 20:02:02
现在,问题是,在CommentsController中重用FilmsController.show中的代码的最佳方法是什么?
您可以将共享控制器逻辑移动到应用程序控制器(或库,并适当地要求它)中的一个la:
class ApplicationController < ActionController::Base
def foo
@foo = "foo"
end
end财务主任:
class CommentsController < ApplicationController
before_filter :foo, :only => [:index]
def index
end
end电影总监:
class FilmsController < ApplicationController
before_filter :foo, :only => [:show]
def show
end
end对于重复的视图逻辑,您可以将其移动到一个公共文件夹,比如your_app/app/views/shared/_foo.html.erb并适当地呈现它。
另一种选择是将相关代码放入外部模块:
lib/mymodule.rb
module MyModule
def foo
end
end然后,您可以将模块包含在控制器内或任何您想访问foo方法的地方。
class CommentsController < ApplicationController
include MyModule
def index
foo()
end
endhttps://stackoverflow.com/questions/14486224
复制相似问题