2012-03-08 120 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在视图加载时进行。这对于编辑操作或在验证错误后重新显示表单时的新操作非常重要。