2017-11-03 59 views
1

我从我的前端应用程序中获取动态数组字段,以确定我的工作簿将具有哪些内容。其中两个字段具有相同的值,但我需要不同的列标题。所以,我已经加入这个我的方法:重命名AXLSX的Rails参数

fields = params[:fields] 
    fields[0].replace('new string') 
    sheet.add_row fields 
    exportees.each do |event_session_registration| 
     row_array = params[:fields].map { |field| event_session_registration.try(field) } 
     row_array.map! { |value| value == true ? 'Yes' : value } 
     row_array.map! { |value| value == false ? 'No' : value } 
     sheet.add_row row_array 
    end 

Fields[0]是第一个两个相同的字符串。

现在的问题是,在我的.each循环内,params[:fields]现在与我更新的fields变量具有相同的内容。我尝试过使用.dup,但是这并没有让我的参数保持不变。我可以做来解决这个问题如下:

fields = params[:fields] 
    fields[0].replace('new string') 
    sheet.add_row fields 
    fields[0].replace('original string') 

不过,我很好奇,如果有重复我的params用于在打印不同的列标题的缘故一个更清洁的方式。提前致谢!

回答

0

试试这个:

parameters = params.to_h 
fields = parameters[:fields] 
+0

'PARAMS [:字段]'只是一个简单的数组,你不能叫'.to_h'上。我不确定将'fields'变成散列可以减少这个问题。 –

+0

params是_ActionController :: Parameters_的一个实例,因为所有的对象都有一个object_id,如果你赋值_fields = params [:fields] _这个赋值是通过引用的,而且_object_id_仍然是相同的,所以,当你将params转换为哈希对象是完全不同的,所以你可以做一些像_parameters = params.to_h_和_fields = parameters [:fields] _我编辑我的建议上面 – TolerantX