创建不需要模型的 Rails 视图 + 控制器?

Posted

技术标签:

【中文标题】创建不需要模型的 Rails 视图 + 控制器?【英文标题】:Creating a rails view + controller that doesn't require a model? 【发布时间】:2018-06-21 02:33:28 【问题描述】:

对于实际上不需要模型的页面的正确设计是什么,我有点困惑。

例如,我想创建一个导出页面,允许用户将各种其他模型导出为 CSV。

显然我需要一个视图(很可能是一个show.html.erb 文件)和一个控制器;但是制作某种Export 模型并没有什么意义,创建新/编辑/索引视图也是如此。

为我的导出页面手动创建视图+控制器是正确的方法吗?在阅读了如此严重地基于 MVC 模式的 rails 文档之后没有模型似乎很奇怪,但我也看不出有任何理由为什么我“需要”在这种情况下遵循该模式,其中模型只是没有意义。

【问题讨论】:

【参考方案1】:

我猜你正在使用scaffold 生成器,确实创建了一个模型。

如果您只想创建视图和控制器,请在终端中输入。

rails g controller exports

这将创建与控制器关联的视图、控制器和资产。只需添加路线。

resources :exports

【讨论】:

【参考方案2】:

您不需要模型。如果您有模型,rails 中的生成器和假设通常会更好地工作,但您不需要模型。您可以手动创建控制器和视图,或使用rails g controller exports

您可能会查看表单对象以在控制器中提供模型 - 这些是普通的旧 ruby​​ 对象,提供没有数据库记录的模型。

Export 的表单对象可能这样开始:

class Export
  include ActiveModel::Model
  include ActiveModel::Validations::Callbacks
end

【讨论】:

【参考方案3】:

    在您的app/controllers 文件夹中创建一个controller,如下所示:

    class ExportsController < ApplicationController
      def show
        @export = ... # Your query here
      end 
    end
    
    app/views 文件夹内创建一个名为exports 的文件夹。 在您刚刚创建的exports 文件夹中创建您的show.html.erb

    像这样手动添加您的exports#show 路由:

    resources "exports", only: [:show]
    

    你应该很高兴。在 ExportsController 中添加必要的 auth 和 before_action 方法。

【讨论】:

以上是关于创建不需要模型的 Rails 视图 + 控制器?的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 相同的模型/控制器,但不同的视图

Rails:如何跨视图访问模型和控制器数据?

尝试在我的产品视图中在 Rails 中呈现类别

为啥 Rails 不自动生成视图文件?

Rails:需要帮助在另一个模型的视图中显示一个模型的表单

在链接到 Rails 中的模型视图时需要一些帮助