2014-05-23 35 views
1

我希望能夠從現有的一系列城市中選擇一個城市。從一組選項中選擇助手選擇?

我已經存儲了城市在ControllerName控制器的陣列作爲一個全局變量

$cities = ["city1"...."city20"]

,我希望能夠通過訪問他們:<%= p.select(:city, $cities{ |c| [c.name, c.id]}) %>

後來我收到錯誤消息undefined method name for 'city1'

如何從現有數組中選擇? 我應該爲城市做一些控制器嗎?

更新#1

我來使這個代碼和

$cities=['city1',...'city20'] 

@city = Array.new 
i = $cities.size 

i.times do |x| 
    @city[x] = City.new 
    @city << $cities[x] 
end 

代替undefined method名稱」爲 「City1」:字符串I got未定義的方法name' for "City20":String

PS :城市表有一個名爲'name'的列,所以問題是不是特別有

更新#2:問題解決

讀這一點後,Rails文檔,我能夠讓我的代碼稍加改進,我可能實際上解決問題。

在我的形式,我已編輯的代碼是:

<%= p.select(:city, options_for_select(@cities_array))%>

而且在我ControllerName控制器,我已經把這個:

$cities.length.times do |x| 
@city = City.new({:name => $cities[x]}) 
@city.save 
    end 


@cities_array = City.all.map { |city| [city.name, city.id] } 

而這恰是到了。

如果您有其他解決方案,無論是更簡單還是更復雜,請分享它作爲答案。

+0

如果'City'是一個模型,那麼你最好將你的城市添加爲種子,現在你的代碼會在你每次打電話給你的動作時將你所有的城市添加到db中 – Aguardientico

+0

這是對的,我再次掙扎**找到一種方法來設置他們一勞永逸我可以把它們作爲**種子** –

+0

順便說一句:最簡單的解決方案(我認爲):'p.select:city.pluck(:name,:id)'db/seeds.rb'中的 – Aguardientico

回答

1

你有多種選擇將數據插入到數據庫。

第一個。添加此上遷移:

rails generate migration add_cities_rows

遷移裏面你可以添加類似:

cities = ['city1', 'city2', 'city3'] 
cities.each {|city| City.create(name: city)} 

,那麼你可以運行:rake db:migrate

可以在db/seeds.rb文件中添加相同的邏輯所以如果你想重新生成你的數據庫運行rake db:setup它會做到這一點。

在你view(你正在使用的選擇助手您可以使用以下sintaxis填補了選擇:

<%= p.select :city, City.pluck(:name, :id) %>

所以在您的控制器喲不要needto添加任何邏輯

+0

想象一下,我每次都想將數據添加到數據庫中,實際上每次我調用'rake db:seed'時,數據都會被重寫到我的數據庫中,如何避免這種情況? –

+1

當你想添加新的數據,只需添加這個遷移「種子的東西」用於當你想補充/重新生成你的數據庫 – Aguardientico

+0

我添加了邏輯'遷移'self.up'功能,我跑'rake db :migrate',但它不會將數據放入我的數據庫。發生了什麼? –

0

這個錯誤是因爲「city1」是一個字符串,你調用名未被定義一個String對象上方法。

也許你可以有一個城市模型規定,必須有內數據庫列**名。所以名字方法爲城市對象

這裏被定義,$城市是一個字符串數組,它應該是市數組對象代替。

中,爲城市的控制和收集城市從這些字符串數組對象數組,並通過上查看

+0

你能提供一個我應該編寫的代碼來創建一個** City Objects **的數組嗎? 我來做這個'@city = City.new $ cities.length.times do | x | @city [x] = $ cities [x] end' 但它似乎沒有辦法。 –