在 Rails 上共享控制器操作/对象
Share Controller Actions / Objects on 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
调用 PostsController
的 index
操作,所以我不必重复执行方法
好问题!
可能看起来重复太多了,但是在控制器中重复数据库查询完全没问题。不要像您一样实例化一个新的控制器实例,然后在其上调用 index 方法。
请记住,HTTP 请求被路由到正确的控制器操作,然后呈现视图。因此,将相同的视图重构为局部视图并呈现它们非常好,但不要为控制器中的重复代码而烦恼,特别是如果它只是一个简单的查询。
一旦您的应用程序发展壮大,您的控制器中就会有更多的代码,而且看起来不会那么重复。
如果您有较大的重复代码块,则可以处理关注点(How to use concerns in Rails 4 它们也适用于模型)。
作为 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
调用 PostsController
的 index
操作,所以我不必重复执行方法
好问题!
可能看起来重复太多了,但是在控制器中重复数据库查询完全没问题。不要像您一样实例化一个新的控制器实例,然后在其上调用 index 方法。
请记住,HTTP 请求被路由到正确的控制器操作,然后呈现视图。因此,将相同的视图重构为局部视图并呈现它们非常好,但不要为控制器中的重复代码而烦恼,特别是如果它只是一个简单的查询。
一旦您的应用程序发展壮大,您的控制器中就会有更多的代码,而且看起来不会那么重复。 如果您有较大的重复代码块,则可以处理关注点(How to use concerns in Rails 4 它们也适用于模型)。