我有一个模型“项目”,我想生成一堆项目与从CSV文件中获取的数据。但我想让用户选择使用哪些数据列。如何动态生成创建方法的参数?
所以我的模型“用户”有一个名为列的json属性,告诉哪些列应该从该用户的CSV文件中使用。例如,如果user.columns == {"title"=>"true","category"=>"false"}
,则应使用标题列,但类别列不应。 (或者,我可以只列出我想包括列,像这样:{"title"=>"included"}
,后来做类似user.columns.each {|c| c[0]}
得到所有包含列阵列)
我有生成项目的方法基于CSV数据:
def create
#...
SmarterCSV.process(file).each do |row| #this line returns an array of all the rows in the CSV file
Item.create(title: row[:title], category: row[:category])
end
end
,但我怎么能修改的基础上user.columns
内容的方法的参数?对于{"title"=>"true","category"=>"false"}
示例,该方法仅为Item.create(name: row[:title])
。是否有可能动态生成这样的方法?
我打算有相当多的可能的列,所以做一个if
有条件的每一种可能性是不可行的。
目前还不清楚列名与您在'create'参数中需要的对应关系。但似乎你应该修改'user.columns'来返回别的东西(或者提供其他用户方法来这样做) –
@MarkThomas对不起,如果我不清楚,我想根据内容为我的'create'动作生成参数'user.columns'。例如,如果'user.columns = {“included_column”=>“true”,“another_included_column”=>“true”,“not_included_column”=>“false”}',那么'create'参数就是Item。 create(included_column:row [:included_column],another_included_column:row [:another_included_column])''。那有意义吗? 'not_included_column'不会是一个参数,因为它在'user.columns'中是错误的。 –
'row'包含什么? –