2015-06-07 199 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