2012-03-08 298 views
0

我有一個散列項目,我通過Freebase獲取。我想包括它,因爲我將模型放在rails form_for中。紅寶石散列到軌道

即(我使用formtastic),這個工作在一個模型......

<%= f.input :source, :as => :select, :collection => @subject.types, :member_label => :name, :member_value => :id, :input_html => { :class => 'combobox' } %> 

但不是我的哈希值。

我的問題是我怎樣才能使用外部來源的鐵軌form_for助手,以及這是否是我應該採取的路線。我敢肯定,我可以使用form_tag採取另一條路線,然後循環通過簡單的紅寶石哈希,但也許使用rails方法會更優雅和可維護?我也沒有存儲freebase數據,只是ID。

簡化陣列/哈希:

[{:name=>"US President", :value=>"/m/02mjmr"}, {:name=>"Election campaign", :value=>"/m/047qllg"}, {:name=>"Event", :value=>"/m/057l6lw"}] 

或遊離鹼的搜索結果的完整哈希:

[{"mid"=>"/m/02mjmr", "name"=>"Barack Obama", "notable"=>{"name"=>"US President", "id"=>"/government/us_president"}, "lang"=>"en", "score"=>156.429855}, {"mid"=>"/m/047qllg", "name"=>"Barack Obama presidential campaign, 2008, General Election", "notable"=>{"name"=>"Election campaign", "id"=>"/government/election_campaign"}, "lang"=>"en", "score"=>58.741718}, {"mid"=>"/m/057l6lw", "name"=>"Barack Obama 2009 presidential inauguration", "notable"=>{"name"=>"Event", "id"=>"/event/event"}, "lang"=>"en", "score"=>57.407536}] 

回答

2

你應該能夠很容易地做到這一點是這樣:

<%= f.collection_select :freebase_id, options_from_collection_for_select(@freebase_hash, :value, :name, @object.freebase_id) 

@ object.freebase_id被傳遞給options_from_collection_for_select,以便它可以指定哪個(如果有的話)是sel在視圖加載時進行。這對於編輯操作或在驗證錯誤後重新顯示錶單時的新操作非常重要。