在工作中我们有一个可下载的ZIP文件,在下载页面上我们列出了文件的内容,以便人们知道ZIP包含的内容。以前,这个ZIP内容列表是手动维护的,而且往往不准确/过时。为了解决这个问题,我写了一个独立的Ruby脚本,它从命令行调用,如$ ruby my_script.rb arg1 arg2 arg3
。此脚本生成HTML,我们可以将其粘贴到网页中以显示ZIP文件内容。
arg1
是ZIP文件的解压缩内容的路径,arg2
和arg3
是包含如下数据的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。
我的问题是,我应该在哪里存储arg2
和arg3
包含的数据?这两个文件都需要能够由生成HTML的任何人更新。我想也许我可以将这些信息存储在数据库中,每行一行数据库记录,然后提供添加/删除/更新记录的界面。然后,为了获取数据,我将使用Version.all或Description.all来获取所有记录。不过,我有点犹豫,要建立一个模型来保存这些数据,因为它没有真正建模任何东西 - 它只是CSV文件的可保存表示。
答案 0 :(得分:0)
数据强>
数据是相对简单的部分 - 你应该将它保存在你的模型中。数据库中。
您可能需要两个模型(User
和Details
),您可以使用以下代码填充这些模型:
#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),它将使您能够更加一致地管理数据。它不会复制或替换您的本机/后端代码