2016-08-30 110 views
0

當以前導入我的CSV文件的數據將上傳排序,但現在,沒有明顯的原因,它不是上傳後排序,我很難找出如何得到它排序。排序導入的文件ruby

要解決這個問題,我正在查看我的文件上傳代碼和HTML代碼。我建立了一個動態的下拉框,用戶選擇一個狀態,該狀態填入下一個下拉框,所有銀行在該狀態下通過銀行名稱列出。我需要第二個下拉框中的銀行名稱按字母順序顯示。以前,當我上傳我的CSV文件時,銀行名稱會按字母順序顯示,但現在不是這樣。

任何幫助將不勝感激。我在這裏可能忽略了一些愚蠢的東西。

FDIC模型

def self.import(file) 
     CSV.foreach(file.path, headers: true) do |row| 
     attributes = row.to_hash 
     attributes['state'] = State.where(name: attributes['state']).first 
     Fdic.create! attributes 
     end 
     end 

HTML

<h4>Select a State</h4> 
<%= select_tag :state, options_for_select(State.all.pluck(:name)), include_blank: "States" %> 

    <h4>Select a Bank</h4> 
<%= select_tag :bank, option_groups_from_collection_for_select(@states, :fdic, :name, :id, :bank), include_blank: "Select a Bank" %> 

回答

0

如果我正確理解你的問題,如果你的模型的狀態如下:

class State < .. 
    has_many :banks 
    etc.. 
end 

這種修正應該幫助你,我認爲。

class State < .. 
    has_many :banks, -> { order("banks.name") } 
    etc.. 
end 

P.S. 如果要使用find_by您的代碼會更清晰的)

attributes['state'] = State.find_by(name: attributes['state']) 
+0

完美工作,謝謝@Alex Golubenko! – BlueDevilPride

+0

我對Ruby比較陌生,最初的本能是爲控制器或HTML添加sort,sort_by或order。訂單是否也可以在這些地方完成,或僅僅是模型? – BlueDevilPride

+0

@BlueDevilPride當你使用'option_groups_from_collection_for_select'時,你使用模型'Bank',所以這意味着你應該在Model中做出訂單,在Controller中你也可以使用'sort'或'sort_by',但是隻有當你使用控制器的時候) –