在Rails上共享控制器操作/对象



作为一名Rails新手,我想知道重用与数据库对象交互的代码的正确方法是什么。例如,我有:

class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
def index
@posts = Post.all
end
end

我还有一个带有欢迎控制器的欢迎页面:

class WelcomeController < ApplicationController
def index
@posts = Post.all
end
end

我也想在欢迎页面上显示相同的帖子列表。我为Posts实现了一个部分视图,并在Welcome视图中使用了它,但在Welcome控制器上重复相同的数据库查询似乎是错误的做法,因为我在重复自己。

我也这样调用了其他控制器的操作,但我不知道这是否可以接受。

class WelcomeController < ApplicationController
def index
@posts = PostsController.new.index
end
end

我想知道是否有一种正确的方式(rails方式(在控制器之间共享操作。本质上,从WelcomeController调用PostsControllerindex操作,这样我就不必实现重复方法

好问题!

这可能看起来重复太多,但在控制器中重复数据库查询是完全可以的。不要实例化一个新的控制器实例,然后像以前那样调用它的index方法。

请记住,HTTP请求被路由到正确的控制器操作,然后呈现视图。因此,将相同的视图重构为部分视图并进行渲染是非常好的,但不要担心控制器中的重复代码,尤其是如果它只是一个简单的查询。

一旦你的应用程序发展壮大,控制器中就会有更多的代码,看起来就不会那么重复了。如果您有重复的较大代码块,您可以处理关注点(如何在Rails4中使用关注点,它们也适用于模型(。

最新更新