首先忠告 - CSV可能是最坏的想象数据格式,除非绝对不可避免的,最好避免 - 一样,如果客户坚持在MS Excel操作的数据是一个好主意(它不是) 。
如果您必须使用CSV,请不要使用像.tags
这样的方法名称,这可能会导致常规的ActiveRecord关系混淆。
从文件系统读取的测试方法可能相当困难。
首先,您可能需要更改方法的签名,以便可以传递文件路径。
def self.tags(file = "db/data.csv")
# ...
end
这样,您可以传递一个夹具文件,以便您可以确定性地测试它。
RSpec.describe Image do
describe "tags" do
let(:file) { Rails.root.join('spec', 'support', 'fixtures', 'tags.csv') }
it 'returns an array' do
expect(Image.tags(file)).to eq [ { foo: 'bar' }, { foo: 'baz' } ]
end
end
end
但是你的方法是非常ideosyncratic -
def self.tags
t = "db/data.csv"
@arr = []
self.tags
使得一个类的方法还您声明@arr作为实例方法。
此外,Ruby的enumerable模块提供了很多操作数组的方法,因此不需要在循环中使用外部变量。
def self.tags(file = "db/data.csv")
csv_data = CSV.read(file)
csv_data.shift
csv_data.compact # removes nil elements
end
来源
2016-05-23 16:35:46
max
这个问题有点宽泛,请添加详细信息以缩小答案集或隔离问题。例如,你的模型的解释 –