【发布时间】:2014-07-14 17:33:56
【问题描述】:
我的用户正在提交包含多个项目的请求。无论项目如何保存到 SQL 数据库中,为了便于分析,我都需要解析每个项目并将其作为单独的数据行保存在 Excel 文件(Google Drive)中。
换句话说,在 SQL 中,请求看起来像这样:{:name => "john", :email => "john@gmail.com", :items => ["a", "b", "c"],但我需要将其转换为每个项目有 3 行的文档,并且各行之间唯一不同的是项目。
- 第 1 行的名称 = John,电子邮件 = John@gmail.com,项目 = a
- 第 2 行的名称 = John,电子邮件 = John@gmail.com,项目 = b
- 第 3 行的名称 = John,电子邮件 = John@gmail.com,项目 = c
我在下面的工作,但我想知道它是否是最有效的,无论是从以下角度来看:
- 有没有更简单的方法来获取参数?
- 是否有更简单的方法来解析和保存单个数据?
谢谢!
型号代码
class Request < ActiveRecord::Base
serialize :items
validate :must_have_one_item
def must_have_one_item
errors.add(:items, 'You must select at least one item') unless self.items.detect { |i| i != "0" }
end
end
查看代码
<%= f.check_box(:items, {:multiple => true}, "#{thing}") %>
<%= f.label(:items, "#{thing}") %>
这里,thing 是迭代器函数的一部分,它遍历要选择的潜在项目的预定义列表。
CONTROLLER 代码,包含大量 cmets!
class RequestsController < ApplicationController
def new
@requestrecord = Request.new
end
def create
@requestrecord = Request.new(request_params)
if @requestrecord.save
# Given model/ form code so far, the items are passed through as an array. The remaining comments uses the example: @requestrecord.items = ["water filter", "tent", "0", "0", "0"]. What happens is that "0" represents blank checkboxes
@requestrecord.items.select! { |x| x != "0" } #removes blank checkboxes; @requestrecord.items = ["water filter", "tent"]
num_of_requests = @requestrecord.items.count #counts number of items requested; num_of_requests = 2
i = 0
cloned_request = Hash.new
while i < num_of_requests do
cloned_request[i] = Marshal.load(Marshal.dump(@requestrecord)) #creates a cloned_request[0] = @requestrecord and cloned_request[1] = @requestrecord
cloned_request[i].items = @requestrecord.items.slice(i) #disaggregates the items into the cloned_requests; cloned_request[0].items = "water filter", cloned_request[1].items = "tent"
i += 1
end
cloned_request.each do | key, request |
request.save_spreadsheet
end
else
render 'new'
end
end
private
def request_params
params.require(:request).permit({:items => []})
end
end
【问题讨论】:
标签: ruby-on-rails ruby forms