2015-06-07 163 views
0

我试图将我的数据导出为CSV文件n允许它被下载。我想从相关模型中获取数据的名称,而不是外键。但我仍然得到外键。导轨导出为CSV

//Controller 
@missions = Mission.where({:status => 1}).order(:name) 
    respond_to do |format| 
     format.csv { render text: @missions.to_csv } 
    end 

// Model 
def self.to_csv 
    CSV.generate do |csv| 
     csv << column_names 
     all.each do |mission| 
     csv << mission.attributes.values_at(*column_names) 
     end 
    end 
    end 

有没有办法指的region_id外键,其regions.name

回答

1

如果你正确有的has_many关系的设置,您就可以使用访问任务的第一区域的名称:

mission.regions.first.name 

或你的循环之外,你可以使用返回的第一个任务的区域名称:

Mission.first.regions.first.name 

如果每个任务只应该有一个区域,您可能需要将has_many更改为has_one。在这种情况下,你可以将多个区域,并取代它与区象下面这样:

Mission.first.region.name 

在这之后是设置,下面的教程来帮助你完成其余部分:

https://www.lockyy.com/posts/rails-4/exporting-csv-files-in-rails

+0

我得到以下未定义的方法'第一'为#<任务:0x007f8c622d94c0> –

+0

当我尝试“mission.region.name”我得到以下错误 - 未定义的方法“地图”为“纽约”:字符串 –

+0

.first是一种方法选出Mission的第一个对象。您正在接收未定义的方法,因为您正在每个任务对象中遍历一个.each块 - 使用它。 Mission和Region之间有has_one或has_many关系吗? – user3834416