独立的Ruby脚本到Rails 4 Web应用程序:存储配置详细信息的位置

时间:2014-09-15 22:05:46

标签: ruby-on-rails ruby

在工作中我们有一个可下载的ZIP文件,在下载页面上我们列出了文件的内容,以便人们知道ZIP包含的内容。以前,这个ZIP内容列表是手动维护的,而且往往不准确/过时。为了解决这个问题,我写了一个独立的Ruby脚本,它从命令行调用,如$ ruby my_script.rb arg1 arg2 arg3。此脚本生成HTML,我们可以将其粘贴到网页中以显示ZIP文件内容。

arg1是ZIP文件的解压缩内容的路径,arg2arg3是包含如下数据的CSV文件的路径:

#arg2 — version numbers
/path/to/some/file,4.0
/path/to/another/file,3.2.9
/path/to/third/file,1.0

#arg3 — descriptions
/path/to/fourth/file,Here is a description
/path/to/fifth/file,Here is a description
/path/to/sixth/file,Here is a description

我想将这个独立的Ruby脚本转换为Rails 4 Web应用程序,以便公司内的多个人可以生成所需的HTML。

我的问题是,我应该在哪里存储arg2arg3包含的数据?这两个文件都需要能够由生成HTML的任何人更新。我想也许我可以将这些信息存储在数据库中,每行一行数据库记录,然后提供添加/删除/更新记录的界面。然后,为了获取数据,我将使用Version.all或Description.all来获取所有记录。不过,我有点犹豫,要建立一个模型来保存这些数据,因为它没有真正建模任何东西 - 它只是CSV文件的可保存表示。

1 个答案:

答案 0 :(得分:0)

数据

数据是相对简单的部分 - 你应该将它保存在你的模型中。数据库中。

您可能需要两个模型(UserDetails),您可以使用以下代码填充这些模型:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :details
end

#app/models/detail.rb
class Detail < ActiveRecord::Base
   #fields id | user_id | version | description | created_at | updated_at
   belongs_to :user
end

您可以使用Devise进行身份验证,这样您就可以接受注册&amp;应用中的用户群。然后,您就可以将应用的details与您拥有的每个用户相关联。

你将能够相对简单地完成这项工作:

#config/routes.rb
resources :details do
    get :send #-> domain.com/details/:detail_id/send
end

#app/controllers/details_controller.rb
class DetailsController < ApplicationController
   before_action :authenticate_user!

   def new
      @detail = current_user.details.new
   end

   def create
     @detail = current_user.details.new details_params
     @detail.save
   end

   def send
       #invoke rake task here
   end

   private 

   def details_params
      params.require(:detail).permit(:user_id, :version, :description)
   end
end

最后,这将使您能够use Rake这样:

#lib/tasks/file.rake
namespace :file do
    task :send => :environment do
        #invoke script for file here
    end
end

-

显然这是非常普遍的,但希望它能让你能够看到如何将独立的Ruby脚本集成到Rails应用程序中。

IMO,Rails应该真正用于让您管理用户和管理员的能力。数据以更有条理的方式。来自Ruby / native dev,您将理解Rails只是一个框架(实际上,“只是”a gem),它将使您能够更加一致地管理数据。它不会复制或替换您的本机/后端代码