2016-01-20 74 views
2

我在我的ROR應用程序中使用了一個哈希常量。我想從哈希常量中顯示names以下拉。在下拉列表中顯示幫助程序方法的值

helper.rb

PRODUCE_GROWING_METHODS = [ 
    {id: 1, name: 'Conventional'}, 
    {id: 2, name: 'Organic'}, 
    ] 

def produce_growing_methods 
    PRODUCE_GROWING_METHODS 
    end 

_produce.haml

= f.simple_fields_for :produce_details do |pd| 
    = pd.input :produce_growing_method, :collection => produce_growing_methods.collect { |x| [x[0], x[1]] }, :prompt => "Select Growing Method" 

我試圖在_produce.haml如上圖所示,但我得到空下拉。來自常量的Names未在下拉列表中填充。

任何一個可以幫助我如何顯示從PRODUCE_GROWING_METHODS哈希常數names下拉。

謝謝

+0

是否確定了'CONSTANT'是提供給助手?常數在哪裏申報? –

+1

嘗試'produce_growing_methods.map {| x | [x [:id],x [:name]]}'因爲[0]和[1]將返回nil。在Hash中,'[]'方法是通過鍵尋找一個元素,因爲你沒有鍵'0'或'1',所以你總是會得到零。另一個選擇是使'PRODUCE_GROWING_METHODS'成爲像[[1,'Conventional'],[2,'Organic']]'的多維數組,然後你可以直接將它傳入像'collection:produce_growing_methods ' – engineersmnky

+0

@engineersmnky你是對的。請發佈這個答案。 – user2681579

回答

3

您應該按鍵映射散列。在你的情況下,關鍵是:id:name

produce_growing_methods.map { |x| [x[:id], x[:name]] } 

在現實中,你總是會更好使用通用的解決方案而不是手工映射。 這裏是達到同樣的一個更好的方式,但它也能發揮作用的陣列的千個散列:

ary = [ 
    {id: 1, name: 'Conventional'}, 
    {id: 2, name: 'Organic'}, 
] 
ary.map(&:values) 
#=> [[1, "Conventional"], [2, "Organic"]] 
+0

感謝您的解釋! – user2681579