【发布时间】:2020-04-05 18:29:53
【问题描述】:
作为一名 Rails 新手,我想知道重用与数据库对象交互的代码的正确方法是什么。例如我有:
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
def index
@posts = Post.all
end
end
我还有一个带有 Welcome 控制器的 Welcome 页面:
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 调用index PostsController 的动作,所以我不必实现重复该方法
【问题讨论】:
-
像这样初始化控制器是行不通的。控制器本质上是 Rack 应用程序,因此您需要将包含请求上下文的 env 哈希传递给初始化程序。这也很像该方法不会返回@posts 的值。它将返回执行隐式渲染的结果,这是一个响应对象。
标签: ruby-on-rails ruby model controller action