我会保持简短:我应该从Controller2.getByCriteria(some, criteria, here)
调用Controller1
然后为要使用的视图设置实例变量,还是应该从Controller1
的视图中调用它类似于= render Controller2.getByCriteria(some, criteria, here)
?
答案 0 :(得分:2)
一般来说,从另一个控制器调用一个控制器的操作是一个设计错误。它要么意味着你有共同的业务逻辑,这意味着代码应该在models
(或者lib
),或者你有共同的视图逻辑,这意味着代码应该在helpers
中。
所以在你的情况下,我认为使用帮助器似乎很合适:
module ApplicationHelper
# ...
def getByCriteria(some, criteria, here)
# handle criteria here
# Something like:
# render :partial => 'foo'
end
# ...
end
然后只需从视图中调用它。
如果您希望在整个应用程序中使用完整的控制器/视图来共享组件,则可以使用名为cells
的gem。它使您可以创建可重复使用的控制器和视图组件。
答案 1 :(得分:2)
执行此操作的正确方法是将控制器方法(而非控制器操作)声明为帮助程序。