从视图中调用控制器操作...或不?

时间:2011-11-16 07:50:38

标签: ruby-on-rails model-view-controller

我会保持简短:我应该从Controller2.getByCriteria(some, criteria, here)调用Controller1然后为要使用的视图设置实例变量,还是应该从Controller1的视图中调用它类似于= render Controller2.getByCriteria(some, criteria, here)

2 个答案:

答案 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)

执行此操作的正确方法是将控制器方法(而非控制器操作)声明为帮助程序。

See here